0

我需要一个正则表达式来查找<br />块标签之前出现的无关标签,而使所有其他<br />标签保持不变。

这是我正在搜索的文本:

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

但是,当使用以下 RegEx 时:

</? *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 回答