一つの条件の正規表現は書けるようになりましたが、
条件が重なった場合の対処の仕方がわかりません。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現
-
エクセルで数値を全角文字(カ...
-
半角・全角の由来
-
「何とかで始まり、何とかで終...
-
Excel・ユーザーフォームの情報...
-
数字を文字列に変換し短縮化する
-
全角入力
-
住宅にカナを入力する際に丁目...
-
VBAでシングルクオート(8217)を...
-
CSVファイルの中で、「 , 」カ...
-
【ExcelVBA】英数記号の半角変換
-
メール(iso-2022-jp-2)のデコ...
-
文字コードの%E3%80%とは何です...
-
VBA(Excel)でファイル内の文字...
-
SJIS->UTF8->SJISコード変換に...
-
角カッコが含まれてるかどうか...
-
プログラミングでは、半角括弧...
-
[VBScript]バイト長の判定
-
Perl 文字化け
-
エクセルにMicrosoft Barcode C...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
これは大きなお世話ですよね? ...
-
マッチングアプリで一言メッセ...
-
正規表現
-
なんで真面目な出会いを求める...
-
マッチ箱(マッチ棒の入った箱)...
-
金額にマッチする正規表現について
-
シェルスクリプト [[ $number =...
-
条件にマッチした行数のカウント
-
リナックスの grepコマンド ...
-
perlで記号除去を行いたいので...
-
正規表現 URL抽出「 [\\/\\b]{0...
-
UNIXコマンドのパターンマッチ...
-
正規表現
-
Tinderのマッチングアプリ辞め...
-
pythonの正規表現、全角カタカ...
-
正規表現について VB6
-
正規表現 .+? について
-
日本語環境下でのバックスラッ...
-
Perl 正規表現に関して
-
配列内の要素をパターンマッチする
おすすめ情報