ホームページ > バックエンド開発 > PHPチュートリアル > 正規表現を検索するには、負のゼロ幅アサーションを使用する必要があります。

正規表現を検索するには、負のゼロ幅アサーションを使用する必要があります。

WBOY
リリース: 2016-06-23 13:34:58
オリジナル
1454 人が閲覧しました

Content

<a>123456</a>7890234<a>123789</a>
ログイン後にコピー

にない内容、つまり
7890234<a>123789</a>
ログイン後にコピー
に一致する必要があるだけです
以下は自分で書いた正規表現ですが、失敗しました。アドバイスをいただければ幸いです
(?!<a.*?)\d+(?!.*<\/a>)
ログイン後にコピー


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

オンラインで待つ必要があります

123789 も にありませんか?最初に表示される 文字と一致しますか?
文字列処理関数を使用して、最初の を検索し、先頭と末尾の位置を取得して、文字列を処理できる場合があります。

最初に改行で文字列を区切ってから、各部分文字列に対して通常のマッチングを実行することをお勧めします

主に「負のゼロ幅アサーション」の意味を理解したいと思います。誰がこの正規表現を書けるのかわかりません

それはあなたの問題を解決しませんでしたが、それを解決する過程で奇妙な問題に遭遇しました

$str = <<)\d+(?=<\/a>)/',$str,$m);// [0] => 123456preg_match_all('/(?)\d+(?!<\/a>)/',$str,$t1);/*与  相邻的数字没有获取到[0] => 2345[1] => 7890234[2] => 23[3] => 78单独测试 123也是只能获取到 23*/$str_space = << 123456 7890234 123789 EOF;preg_match_all('/(?)\d+(?!<\/a>)/',$str_space,$t2);/*而在  相邻的数字加一个空格就可以了[0] => 123456[1] => 7890234[2] => 123[3] => 789*/echo "
";print_r($m);print_r($t1);print_r($t2);echo "
";
ログイン後にコピー

ご協力ありがとうございます

おはようございますこの問題の解決策はありませんか?

一致するものだけです 123456 に到達するのは非常に簡単です

それを削除すれば、残りは必要なものになりますか?

$s =<<< TXT<a>123456</a>7890234<a>123789</a>TXT;$p = '#\d+[\r\n]+#';preg_match_all("/[^\r\n]+/", preg_replace($p, '', $s), $m);print_r($m);
ログイン後にコピー
Array(    [0] => Array        (            [0] => 7890234            [1] => <a>123            [2] => 789</a>        ))
ログイン後にコピー

PHP の正規表現は最新の正規表現のすべての機能を完全に実現しているわけではなく、アサーションの実装が不完全であることに注意する必要があります
正規表現を学びたい場合は、C# や Java 環境で勉強する必要があります
実際に使用する必要がある場合は、頭を使って柔軟に使用する必要があります

正規表現のサポートは、オープン ソース ソフトウェアである PCRE (Perl 互換正規表現) ライブラリによって提供されます。作者は Philip Hazel です (著作権)。英国ケンブリッジ大学。 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ から入手できます。

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