3

私はインターネット全体でいくつかの有用な情報を探していましたが、見つけすぎたと思います。正規表現を理解しようとしていますが、理解できません。

たとえば$data="A bunch of text [link=123] another bunch of text."、としましょう。これは。に置き換える必要があり"< a href=\"123.html\">123< /a>"ます。

私はこれに似たコードでたくさん試してきました:

$find = "/[link=[([0-9])]/";
$replace = "< a href=\"$1\">$1< /a>";
echo preg_replace ($find, $replace, $data);

ただし、出力は常に元の$dataと同じです。

私は自分の問題に関連する何かが基本を理解しているのを見なければならないと思います。

4

4 に答える 4

3

[]の周りの余分な部分を削除し、の後に()追加して定量化します。また、タグ自体を構成するをエスケープします。+[0-9][]

$find = "/\[link=(\d+)\]/"; // "\d" is equivalent to "[0-9]"
$replace = "<a href=\"$1.html\">$1</a>";
echo preg_replace($find,$replace,$data);
于 2012-09-17T13:37:50.563 に答える
1

正規表現は\[link=([\ d] +)\]になります

正規表現の概要を簡単に説明するための優れた情報源は、http://www.regular-expressions.info/にあります。

正規表現の力に本当に興味がある場合は、この本を購入する必要があります:正規表現の習得

WindowsクライアントでRexExをテストするための優れたプログラムは次のとおりです。RegEx-Trainer

于 2012-09-17T13:48:59.090 に答える
0

数量詞が欠落し+ているため、の後に1桁の数字がある場合、パターンは一致しますlink=

[..]そして、この結果として、アウター[...]はキャラクタークラスとして扱われるという余分なペアがあります。

あなたはまた、クロージングの脱出を忘れました]

解決:

$find = "/[link=([0-9]+)\]/";
于 2012-09-17T13:38:00.680 に答える
0
<?php
$data= "A bunch of text [link=123] another bunch of text.";
$find = '/\[link=([0-9]+?)\]/';
echo preg_replace($find, "<a href=\"$1\">$1</a>", $data);
于 2012-09-17T13:52:43.223 に答える