1

正規表現に問題があります。本当の問題はそれを完全に理解したことがない.

$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";

次に、その行全体が何をするかについておしゃべりします。むしろ、各式が何をするかです。preg_replace と regex チュートリアルの多くの異なるバージョンをグーグル検索してみましたが、\b[^>]* のようなものが何をするかを既に知っていると仮定しているようです。

セカンダリ。私がこれをやろうとしている理由:私は向きを変えたい

<span style="color: #000000">*ANY NUMBER*</span>

の中へ

<span style="color: #0000ff">*ANY NUMBER*</span>

私がすでに試したいくつかのバリエーションは、スクリプトがうまくいかないものもありました。

$data = preg_replace("/<span style=\"color: #000000\">([0-9])</span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);//just tried to match atleast 0-9

$data = preg_replace("/<span style=\"color: #000000\"\b[^>]*>(.*?)</span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);

$data = preg_replace("/<span style=\"color: #000000\"\b[^>]*>([0-9])</span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);

この特定の問題に対する答えは、私にとってサイトほど重要ではないので、それを確認してください。さまざまなサイトをたくさん試しましたが、私の理解を超えていないことは確かです。すべての悪いチュートリアル/サンプルファームに適したものを見つけることができません. w3 と phpdotnet の通常のフォールバックには、今回は必要なものがありません。

EDIT1同様の答えを探してここにたどり着いた人のために:

$data = preg_replace("/<span style=\"color: #000000\">([0-9]{1,})<\/span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);

必要なことをしました。悲しいことに、それは私が試した最初のことの 1 つでしたが、代わりに </span> を入れていなかったため、機能していませんでした。数値 (任意の整数 0-9 を [0-9] で少なくとも 1 回、{1} で可能な限り何度でも照合するように指示しても、目的に適合します)

ROY Finley 投稿: http://www.macronimous.com/resources/writing_regular_expression_with_php.asp 式の定義のリストと以下の良い例のワークアップがある良いサイトです。

また、regular-expressions.info/tutorial.html が数回投稿されました。よりゆっくりとした詳細なウォークスルーですが、私のように立ち往生している場合は問題ありません。

regex101 とパーサーについては、後で試してみたいと思います。

EDIT2 DWright は、「Mastering Regular Expressions」の下に本のリンクを投稿しました。正規表現を見て、文字の畳み込みの頭または尾を作成できない場合は、それを選択する価値があります。約半分を読むのに約1時間半かかりましたが、Googleに費やす時間とそれを回避するために使用される混乱した回避策に比べれば、それは時間ではありません.

また、以下にリンクされている html 解析は、この特定の問題に適しています。

4

3 に答える 3

6

正規表現を説明するには、Regex101をご覧ください。実際に正規表現を学習するには (これをお勧めします)、これは非常に優れた詳細なチュートリアルです。これを読んだ後は、PHP.net の PCRE ドキュメントはもはや難解ではないように見えるはずです。これを読むと、PHP のいくつかの特定の相違点を理解するのに役立ちます。

ただし、当面の問題については、実際には正規表現をまったく使用しないでください。DOM パーサーが最適です。これは、サードパーティのものを使用するのに非常に便利であり、これは PHP 自体がもたらすものです。hakre が述べたように、この目的で利用できるライブラリのより広範なリストを次に示します。

PHP の正規表現に関するもう 1 つの一般的な推奨事項: 単一引用符を使用します'/pattern/'。これは、二重引用符を使用するとエスケープ シーケンスで多くの問題が発生するためです (それ以外の場合は、いくつかのバックスラッシュを二重にする必要があります)。

最後に、エラーが発生する理由は、正規表現区切り文字 (使用)がエスケープされずに/パターン (終了タグ内)に表示されるためです。spanつまり、エンジンはパターンが最初/で終了し、 span>/6 つの異なる修飾子であると見なします (そのほとんどは実際には存在しません)。のように区切り文字をエスケープすることも、<\/span>さらに良いことに、区切り文字を変更することもできます (ほとんど何でも使用できます) '~yourPattern/Here~'

編集:この回答を投稿してから、正規表現を視覚化して説明しようとする 2 つの新しい Web サイトがリリースされました。現在、(かなり制限された) JavaScript フレーバーのみをサポートしていますが、開始するのに適したポイントです。

于 2012-12-21T23:56:06.763 に答える
1

http://www.macronimous.com/resources/writing_regular_expression_with_php.asp

これを見てください。プロセスをかなりカバーしているようです。

于 2012-12-21T23:55:59.023 に答える
1

おそらく、このウェブサイトを試してみてください。個人的には、正規表現に本当に興味があるなら、このようなを手に入れる価値があると思います。

于 2012-12-21T23:57:43.697 に答える