一つの条件の正規表現は書けるようになりましたが、
条件が重なった場合の対処の仕方がわかりません。
my $val = "12";
#数字のみ
if($val =~ /^[0-9]+$/){
# match!
}
#0で無い
if($val !~ /^0$/){
# match!
}
# 数字で0でない <---複数条件
?
# 言語でカバーするのではなく、正規表現のみ(1つの正規表現)
# でANDやORやXORができるパターンの記述方法が知りたいです。
if($val =~ /^[0-9]+$/) && ($val !~ /^0$/){
# match!
}
No.5ベストアンサー
- 回答日時:
条件式の AND や XOR に相当するものは、正規表現には存在しません。
というのも、正規表現で表すのは「パターン」であり、「条件」ではないからです。※OR についてはパターンの選択を行う | が相当します。
このため、複数の条件式にしたくない場合は、1つで複数の条件を満たすパターンを書くしかありません。また、汎用的な方法もないので、ケースごとにパターンを書き下ろさなければなりません。
No.2 補足より
> 言語を使った&& ||ではスマートではなく、複雑な内容になってきた場合、1行で解決できた方が発展性があるかと思いましてこだわっております。
確かに「0ではない数字」程度のことを複合条件にするのはスマートとは言えないでしょう。しかし、関連性のない事柄を無理なパターンで表現するくらいなら、分解して && や || で結合した方がすっきりします。
また、大概の場合、1行で無理に解決した方が発展性には欠けますので、発展性やメンテナンス性を求めるならば、あまりこだわらない方がよいでしょう。
No.4
- 回答日時:
「$val =~ /^[0-9]+$/」と「$val !~ /^0$/」を一つにまとめると、下記の様な感じでしょうか。
--------------------------------------------------
if($val =~ /^(?:[1-9]|[0-9]{2,})$/){
# match!
}
--------------------------------------------------
0以外の数字一文字([1-9])、または、数字2文字以上([0-9]{2,})にマッチする正規表現となります。
No.3
- 回答日時:
#2です
最後の
if(($FORM{'s'} =~ /^[^0]+$/) and ($FORM{'s'} =~ /^\d+$/)){
# match!
}
は間違いです。
No.2
- 回答日時:
if(($val =~ /^[0-9]+$/) && ($val !~ /^0$/)){
# match!
}
とか
if($val =~ /^[0-9]+$/){
if($val !~ /^0$/){
# match!
}
}
とか
if($FORM{'s'} =~ /^[1-9][0-9]*$/){
# match!
}
とか
if(($FORM{'s'} =~ /^[^0]+$/) and ($FORM{'s'} =~ /^\d+$/)){
# match!
}
など・・
この回答への補足
ありがとうございます。
if($FORM{'s'} =~ /^[1-9][0-9]*$/){
# match!
}
これが一番スマートだと思います。
でも私が一番知りたいのは正規表現で(?のような拡張構文を使って似たようなことができないかという内容で、でもmoon_right様には感謝しております。
なぜ、正規表現のみでこだわるかといいますと、言語を使った&& ||ではスマートではなく、複雑な内容になってきた場合、1行で解決できた方が発展性があるかと思いましてこだわっております。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 正規数の定義で分からないことがあります。 正規数の定義について専門書において 「xがr進正規であると 1 2023/07/17 20:50
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
- C言語・C++・C# leetcode21 1 2022/04/21 11:53
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/02/10 11:41
- C言語・C++・C# C言語 leetcode21 Merge Two Sorted Lists 2 2022/04/24 19:35
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現
-
CSVファイルの中で、「 , 」カ...
-
EXCELからCSVにすると余計なカ...
-
Excel VBAでPDFファイルをMicro...
-
英数字のみ全角から半角に変換
-
GoogleAppsScript文字列置換の...
-
エクセルにMicrosoft Barcode C...
-
全角/半角キーをSendkeys関数で...
-
IEからEdgeへの移行に伴うIMEの...
-
改行を含んだ文字列を正規表現...
-
VBA 文字に半角が含まれて...
-
VBA 置換文字がみつからない時
-
「何とかで始まり、何とかで終...
-
pythonエラー
-
perl でエラー:Wide character...
-
パイソンエラーについて
-
UWSC教えて
-
VBで、String型のデータが、...
-
文字列を quoted-printable 文...
-
文字コードの%E3%80%とは何です...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現
-
コマンドプロンプトでのsedの使...
-
シェルスクリプト [[ $number =...
-
Perlで別ファイルから文字列の抽出
-
正規表現のことで
-
金額にマッチする正規表現について
-
正規表現。行頭が○○以外にマッ...
-
アスタリスクを検索できません
-
リナックスの grepコマンド ...
-
この正規表現を教えて!
-
正規表現 .+? について
-
sedの正規表現でグループ化する...
-
言語ではなく、正規表現のみで...
-
正規表現について VB6
-
メールアドレスかどうかの
-
タグを削除する正規表現について
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
おすすめ情報