この PHP 正規表現 preg_match が時々 false を返すのはなぜですか?

WBOY
リリース: 2016-09-19 09:16:24
オリジナル
1155 人が閲覧しました

タイトルの通り:

リーリー

返信内容:

タイトルの通り:

リーリー

今フィルタリングしているコードを見てください。 int(0) は一致がないことを意味し、int(1) は一致が成功したことを意味します。

グループキャプチャはむやみに使用できず、通常の記述は簡潔にし、できるだけ操作効率を向上させ、不要な変数を格納しないようにする必要があります。何をしているのかを理解するには、通常のエンジンのバックトラッキング原理を理解する必要があります。

より基本的な知識としては、少なくとも、貪欲なマッチングと非貪欲なマッチングのマッチング原理と運用効率の違いを理解する必要があります。

原文:

リーリー

変更:

リーリー

ご質問を元に分析してみます。

質問の最初のコードを例として挙げます:

リーリー

この PHP 正規表現 preg_match が時々 false を返すのはなぜですか?

合計 74781 ステップ、70,000 ステップ以上かかりました!
上で修正したものに変更しました

リーリー

後:

この PHP 正規表現 preg_match が時々 false を返すのはなぜですか?

必要なステップはわずか 34 ステップです。

マッチングプロセスを分析します。
質問の件名:

この PHP 正規表現 preg_match が時々 false を返すのはなぜですか?

修正されたマッチング手順:

この PHP 正規表現 preg_match が時々 false を返すのはなぜですか?

74781ステップ: 34ステップは約2200%で、効率は本当に違います。

----12月29日追記---
定期学習について:
perlの学習で詳しく勉強しました。個人的には、正規表現をうまく活用するには次の点に従う必要があると考えています:
1 貪欲なマッチングと非貪欲なマッチングを区別する
2 アンカーを使用するようにする
3 グループ化できるものはグループ化するようにする
4 代わりに列挙する場合は、メタキャラクターを逆フィルターして合計する方が良いです。要約すると、たとえば、[a-zA-Z0-9]+ は w+ ほど良くありません。特定のシナリオでは、w+ は 1+ ほど良くありません。アンカー文字 (アンカー ワード、?= ?>、?! の順方向および逆方向の事前検索) を追加すると、いわゆる量指定子のネストが高速になります (貪欲一致を使用しないでください)。 +* を使用すると、バックトラック、つまりバックトラックの数を大幅に減らすことができます。たとえば、100 万平方キロメートル離れて並んでいる 2 本の木はすべてです。あなたは男性です。100 個の特徴を説明する必要はありません。1 つずつ確認させてください。 。
上。


-s↩
http://php.net/manual/zh/func...

preg_match() はパターンの一致数を返します。 preg_match() は最初の一致後に検索を停止するため、その値は 0 (一致なし) または 1 になります。 preg_match_all() は、サブジェクトを最後まで検索するという点でこれとは異なります。 エラーが発生した場合、preg_match() は FALSE を返します。

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