ホームページ > バックエンド開発 > PHPチュートリアル > 正規表現文字列を否定するにはどうすればよいですか?

正規表現文字列を否定するにはどうすればよいですか?

WBOY
リリース: 2016-06-23 14:24:35
オリジナル
3082 人が閲覧しました

正規表現正規 URL

次のような URL ルールがあります:

mm.[*|a|b|add].cn

ここで、 a 、 b 、 add は例外を表します

たとえば、

mm.a。 cn 一致しない

mm.x.cn 一致する

正規表現の書き方は? ? ?

mm.[a|b|add].cn がすべての例外に一致することだけはわかっていますが、否定された結果が必要なだけですか?

ディスカッションに返信(解決策)

$s1= 'mm.a.cn';$s2= 'mm.add.cn';$s3= 'mm.c.cn';$p='/mm\.(.+)(?<!a|b|add)\.cn/';$bool1=preg_match($p,$s1);$bool2=preg_match($p,$s2);$bool3=preg_match($p,$s3);var_dump($bool1,$bool2,$bool3);
ログイン後にコピー
ログイン後にコピー

int(0) int(0) int(1)

preg_match('#www\.(a|b|add)\.cn#',$str)
ログイン後にコピー


合わなかったら

!preg_match('#www\.(a|b|add)\.cn#',$str)
ログイン後にコピー

これはLZにしか言えません?? 書くのは非常に難しい

$s1= 'mm.a.cn';$s2= 'mm.add.cn';$s3= 'mm.c.cn';$p='/mm\.(.+)(?<!a|b|add)\.cn/';$bool1=preg_match($p,$s1);$bool2=preg_match($p,$s2);$bool3=preg_match($p,$s3);var_dump($bool1,$bool2,$bool3);
ログイン後にコピー
ログイン後にコピー

int(0) int(0) int(1)
mm.aadd.cn を試してみますか?

$s =<<< TXTmm.a.cn mm.x.cn mm.aadd.cnmm.c.cnTXT;preg_match_all('/mm\.(?!a|b|add).*?\.cn/s', $s, $r);print_r($r);preg_match_all('/mm\.(?!a\.|b\.|add\.).*?\.cn/s', $s, $r);print_r($r);
ログイン後にコピー
Array
(
[0] => 配列
(
[0] => mm.c.cn
)

)
配列
(
) [ 0]=> mm.c.cn
)

)


preg_match_all('/mm.(?!a.|b.|add.).*?.cn/s', $s, $r);
preg_match_all(' /mm.(?!( ?:a|b|add).).*?.cn/s', $s, $r);

preg_match_all('/mm.(?!a.|b. |add.).*? .cn/s', $s, $r);

preg_match_all('/mm.(?!(?:a|b|add).*?. cn/s', $s, $ r);
最後の文字を追加し、文字全体を除外しますか?学んだ

4階は大丈夫だろう、先に縛ってやる。

偶然この投稿を見ました。 。
まず。 。私は PHP を理解していません。普通に考えれば、これはとても簡単なことではありませんか? 。
これらの文字を逆の意味で除外します:
^mm.[^ab(?:add)]+.cn$

[^ab(?:add)] --> b add を除外します

preg_match_all ('/ mm.(?!a.|b.|add.).*?.cn/s', $s, $r);


preg_match_all('/mm.(?!(?:a | b|add).).*?.cn/s', $s, $r);

この書き方はちょっと冗長ですかね〜

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート