dポイントプレゼントキャンペーン実施中!

正規表現を使って複数条件を指定する場合

"文字列内に●がはいっていたらtrue 
もしくは、先頭に▲がある場合はfalse"
という、論理和的な条件は分かるのですが、

"文字列内に●がはいっていたらtrue 
ただし先頭に▲がある場合はfalse"

という、論理積的な条件の作り方がよく分かりません。

前者では、「もしくは」になってしまうので
先頭に▲があろうがなかろうが、●さえ入っていればtrueになってしまいます。
しかし、やりたいのは「ただし」であり
●がたとえ入っていようと、▲が先頭にあればflaseにしたいのです。
どうすれば、後者の条件を正規表現で実現できるでしょうか?

A 回答 (3件)

論理的な話をしているようなので...


「ただし」という言葉を使うのがわかりづらくしているような気がします。
「かつ」「または」だけを使って構成しなおしてみるのがいいと思います。

"文字列内に●がはいっていたらtrue 
ただし先頭に▲がある場合はfalse"

は、

(1)
"文字列内に●がはいっており、 
かつ先頭に▲以外がある場合はtrue"

と考えるのがいいではないでしょうか。

またはさらに、

(2)
"文字列内に●がはいっており、 
かつ先頭に▲がない場合はtrue"


速度などを考えずに言葉どおりにやると
(1)
if(preg_match("/●/",$val) and preg_match("/^[^▲]/",$val))

(2)
if(preg_match("/●/",$val) and ! preg_match("/^▲/",$val))

のようになるかと思います。
(もちろんstrposなどを使ってもいいと思います。)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど、if内に
preg_matchを二つ置けばよかったんですね。
でも”速度などを考えず”にということは
速度的にはあまりよくない処理方法なのでしょうか・・・。

お礼日時:2008/10/31 10:39

pregでいいのなら、



^(?!▲).*●
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
?ってphpのpregで使えるんでしょうか・・・。
バージョン等の問題なのかもしれませんが
エラーになってしまいます。

お礼日時:2008/10/31 10:36

>"文字列内に●がはいっていたらtrue 


>ただし先頭に▲がある場合はfalse"

preg_match("/^●|^[^▲]+.*●/",$val)
とかでどうですか?

●ではじまるか、▲以外の文字ではじまって●を含むもの・・・
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
参考にしてみます。

お礼日時:2008/10/31 10:35

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