RegEx删除在块级标记之前出现的XHTML换行符

时间:2013-01-18 17:19:38

标签: objective-c regex html-parsing lookbehind

我需要一个RegEx,它会在块标记之前找到无关的<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文档。

1 个答案:

答案 0 :(得分:0)

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

应该做你想做的事。 (See it here)

正则表达式的解释:

<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)

一些意见:

  • 我已从正则表达式中删除了可选的斜杠,因为HTML或XHTML中不存在</br>
  • 我还删除了代码开头的可选空格,因为<和代码名称之间可能没有空格(/和{{1}之间也可能没有空格})。
  • 暂且不说:在有效的XHTML中,>是唯一合法的形式; <br />无效。