![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
一つの条件の正規表現は書けるようになりましたが、
条件が重なった場合の対処の仕方がわかりません。
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ランキング
-
php初心者ですメールについて教...
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
Excel VBAでPDFファイルをMicro...
-
EXCELからCSVにすると余計なカ...
-
エクセルで数値を全角文字(カ...
-
[VBScript]バイト長の判定
-
全角/半角キーをSendkeys関数で...
-
全角英数字の必要性が理解できない
-
住宅にカナを入力する際に丁目...
-
VBA EXCEL あるセルの中の一...
-
メールのcsv添付ファイルの種類...
-
VBAで「,」⇒「.」へ置換後、タ...
-
全角入力
-
VBA 置換文字がみつからない時
-
全角スペース
-
プログラミングでは、半角括弧...
-
perl 初めてのプログラムにエラ...
-
ACCESS VBA でのバイナリデー...
-
○文字目に文字挿入
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現 URL抽出「 [\\/\\b]{0...
-
シェルスクリプト [[ $number =...
-
正規表現について VB6
-
正規表現について
-
日本語環境下でのバックスラッ...
-
正規表現で2種類ある括弧を区別...
-
perlの正規表現で量指定子を繰...
-
perl初心者です。
-
言語ではなく、正規表現のみで...
-
正規表現の展開
-
正規表現
-
正規表現について教えてください
-
正規表現が解読できません。
-
pythonの正規表現、全角カタカ...
-
行末の正規表現について。
-
正規表現。行頭が○○以外にマッ...
-
配列内の要素をパターンマッチする
-
置き換えについて
-
【GVimの正規表現における検索...
-
「?」が含まれるマッチについて
おすすめ情報