0

ブロックタグの前に発生する余分な<br />タグを見つけて、他のすべての<br />タグをそのままにしておく正規表現が必要です。

ここに私が探しているテキストがあります:

<div>some text<br id="first"/>some more text<br id="second"/></div>

ただし、次の正規表現を使用する場合:

</? *br.*?>(?=</? *([^(br)]).*?)

<br />次のように、最初のタグより後のすべてを選択します。

<br id="first"/>some more text<br id="second"/>

...それは私が望むものではありません。のみを選択するように式を変更するにはどうすればよい<br id="second"/>ですか?

注: タグを除く すべてのインライン タグ<br />は、この時点より前に削除されるため、要因にはなりません。また、私は Obj-C/Cocoa を使用しているため、これらの派手な PHP 関数をすべて使用することはできません。:)。また、これは有効な XHTML ドキュメントになります。

4

1 に答える 1

0
<br[^<>]*>(?=\s*<(?!br))

あなたがしたいことをするべきです。(こちらをご覧ください)

正規表現の説明:

<br     # Match <br
[^<>]*  # followed by any number of non-bracket characters
>       # and a >.
(?=     # Assert that we are right before...
 \s*    # optional whitespace,
 <      # followed by any tag
 (?!br) # except br
)       # (End of lookahead)

いくつかのコメント:

  • </br>HTML または XHTML には存在しないため、オプションのスラッシュを正規表現から削除しました。
  • <とタグ名の間に空白がない可能性があるため (また、 と の間/に空白がない可能性があるため)、タグの先頭にあるオプションのスペースも削除しました>
  • 余談ですが、有効な XHTML では、<br />が唯一の正当な形式です。<br id="foo" />無効です。
于 2013-01-18T21:21:28.993 に答える