ホームページ  >  記事  >  バックエンド開発  >  定期的な質問

定期的な質問

WBOY
WBOYオリジナル
2016-06-23 14:39:40777ブラウズ

$string='dj%a3%a3999';if(preg_match('/^[dj]{2}([(\%23)(\%a3\%a3)])((\w)+)$/i', $string,$result)){ print_r($result);}

一致しないのですが、何か良い解決策はありますか?


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

あなたのニーズを教えてください。真ん中の部分の正規表現は非常にわかりにくいです。

/*需求就是dj一个分组%a3%a3 或者%23 是另外一个分组999是一个分组通过$result获取对应的数据。如:*/$result[0]='dj';$result[1]='%a3%a3';$result[2]='999';

$s = 'dj%a3%a3999';preg_match('/([^%]+)((?:%a3|23)+)(.+)/', $s, $r);print_r($r);
Array ( [0] => dj%a3%a3999 [1] => dj [2] => %a3%a3 [3] => 999 )

これを使用します:

$string='dj%a3%a3999';if(preg_match('/^([dj]{2})([%a3]+)(\d{3})$/i', $string,$result)){ print_r($result);}


結果:
RREE







([0] = & gt; dj%a3999 [1] = & gt; dj [2] = & gt;%a3%a3 [3 ] = & gt; 999)
$s = 'dj%23999'; の場合は機能しません。

これを使用します:

Array ( [0] => dj%a3%a3999 [1] => dj [2] => %a3%a3 [3] => 999 )

[/code]
この文字列も一致する必要があります: $string='dj%23999';


$s = 'dj%23999';

preg_match('/([^ %]+)((?:%(?:a3|23))+)(.+)/', $s, $r);

または

preg_match('/([^%]+)((? :%a3|%23)+)(.+)/', $s, $r);

正規表現ルールの説明には次のものが含まれます。

操作中にあいまいさが発生した場合は、列を 1 つずつリストする必要があります。括弧で囲んでください

明らかに (?:%a3|23) % は a3 と結合されているため、曖昧さが生じています


上司、?: を含む正規表現がたくさんあるようですが、説明してもらえますか?これが事実かどうかを知るにはどうすればよいでしょうか?

(?:...) は (...) と同じグループ化効果がありますが、結果は結果セットには表示されません

(?:...) は (...) と同じ効果がありますグループ化しましたが、結果が結果セットに表示されません 🎜 🎜 上司、次のようなアドレスを照合するのを手伝ってくれませんか: 🎜 🎜 www.sohu.com、www.baidu.com、www.yahoo.com.n 🎜 🎜この方法で接続できる URL の最大数は 9 で、sohu.com、baidu.com、yahoo.com.cn 🎜 🎜 (?!(w))(w+(-w+)*)(.( w+(-w+)*))* 🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。