アプリ版:「スタンプのみでお礼する」機能のリリースについて

一つの条件の正規表現は書けるようになりましたが、
条件が重なった場合の対処の仕方がわかりません。

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!
}

A 回答 (5件)

条件式の AND や XOR に相当するものは、正規表現には存在しません。

というのも、正規表現で表すのは「パターン」であり、「条件」ではないからです。
※OR についてはパターンの選択を行う | が相当します。

このため、複数の条件式にしたくない場合は、1つで複数の条件を満たすパターンを書くしかありません。また、汎用的な方法もないので、ケースごとにパターンを書き下ろさなければなりません。

No.2 補足より
> 言語を使った&& ||ではスマートではなく、複雑な内容になってきた場合、1行で解決できた方が発展性があるかと思いましてこだわっております。

確かに「0ではない数字」程度のことを複合条件にするのはスマートとは言えないでしょう。しかし、関連性のない事柄を無理なパターンで表現するくらいなら、分解して && や || で結合した方がすっきりします。
また、大概の場合、1行で無理に解決した方が発展性には欠けますので、発展性やメンテナンス性を求めるならば、あまりこだわらない方がよいでしょう。
    • good
    • 0

「$val =~ /^[0-9]+$/」と「$val !~ /^0$/」を一つにまとめると、下記の様な感じでしょうか。



--------------------------------------------------
if($val =~ /^(?:[1-9]|[0-9]{2,})$/){
# match!
}
--------------------------------------------------

0以外の数字一文字([1-9])、または、数字2文字以上([0-9]{2,})にマッチする正規表現となります。
    • good
    • 0

#2です



最後の
if(($FORM{'s'} =~ /^[^0]+$/) and ($FORM{'s'} =~ /^\d+$/)){
# match!
}
は間違いです。
    • good
    • 0

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行で解決できた方が発展性があるかと思いましてこだわっております。

よろしくお願いいたします。

補足日時:2004/08/28 14:14
    • good
    • 0

正規表現自体は少しくらいならわかりますが、


Perlは全くわからないので、参考程度に…

↓ではダメなんですか?

if($val =~ /^[1-9]+$/){
# match!
}

この回答への補足

この場合でしたら数字に0が入るとマッチしません。
例)101や500など。

スマートな方法があるかもしれませんが、正規表現内でandとorのようなものが使えるか、使えるのでしたらその記述方法が知りたいです。

補足日時:2004/08/28 13:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!