1

正規表現とを学ぶのに苦労していpreg_splitます。

学んだことを応用しようとしていますが、簡単な検索ができないようです。

多くのバリエーションを試しましたが、太字のタグを区別できず、太字のタグのみを区別できません

<?php
$string = "<b>this is</b> <i>not</b> <b>bold</b>";


$find = '/<b>/';       // works as expected, separating at <b>

$find = '/<b>|<\/b>/'; // works as expected, separating at either <b> or </b>

$find = '/<b>*<\/b>/'; // why doesn't this work?

$find = '/^<b>*<\/b>/'; // why doesn't this work?

$find = '/<b>.<\/b>/'; // why doesn't this work

$result = preg_split($find, $string);

print_r($result);

?>

. +ご覧のとおり、開始^/終了$文字を組み込んでいます。

期待どおりに機能しないのに、何が間違っているのでしょうか。

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

psはこれも非常に役立つことを発見しました

4

2 に答える 2

3

最初の2つの「なぜこれが機能しないのか」は、一致し、<bその後に0個以上の>文字が続き、その後に。が続き</b>ます。最後の1つ<b>は、任意の1文字と一致し</b>ます。

正確に何をしようとしているのかわかりませんが、これは開始と終了の太字のタグで分割されます。-<\/?b>一致し<、その後にオプションの/、その後にb>

于 2012-10-02T02:51:21.743 に答える
1
$find = '/<b>*<\/b>/'; // why doesn't this work?

一致"<b"します。0個以上">"の後に。が続き"</b>"ます。

おそらくあなたはこれを意味しました:

$find = '/<b>.*?<\/b>/';

これは、に一致"<b>"し、その後に長さが不明な文字列が続き、の最初の出現で終了し"</b>"ます。しかし、なぜあなたがそれを分割するのかはわかりません。上記に適用すると、3つの要素の配列が得られます。

" "
"<i>not</b> "
""

内部のすべてを一致させるには"<b>"、次のもの"</b>"が必要ですpreg_match_all()

preg_match_all('#<b>(.*?)</b>#i', $str, $matches);
// $matches[1] will contain the patterns inside the bold tag, theoratically

ネストされたタグは正規表現にはあまり適していないため、を使用する必要があることに注意してくださいDOMDocument


$find = '/^<b>*<\/b>/'; // why doesn't this work?

文字列の先頭で一致"<b"します。0個以上">"の後に。が続き"</b>"ます。

$find = '/<b>.<\/b>/'; // why doesn't this work

一致"<b>"し、その後に任意の文字が続き、その後に"</b>"

于 2012-10-02T03:05:41.257 に答える