【问题标题】:How can I find all matches of <element>something</element> with a regex?如何使用正则表达式找到 <element>something</element> 的所有匹配项?
【发布时间】:2012-10-29 21:01:38
【问题描述】:

假设我有:

<any_html_element>maybe some whitespaces <br/>Some text</any_html_element>

我想删除&lt;any_html_element&gt;之后的第一个&lt;br/&gt;

我该怎么做?

【问题讨论】:

  • 你最好不要使用正则表达式并使用 DOM 来操作 HTML - 这就是它的用途:-)
  • 不同意,在某些情况下你不能使用 DOM 功能(例如在服务器上解析 HTML),这种情况下正则表达式是最好的选择。
  • 如果您在服务器上进行解析,请使用 HTML 解析器。正则表达式无法处理 HTML 等非常规语言的所有复杂性。

标签: php html regex


【解决方案1】:

首先不要使用 RegEx,而是使用 HTML 解析器来识别您要操作的代码块。

隔离实际代码后,您可以进行替换以删除 &lt;br/&gt;


这里有几个 PHP HTML 解析器链接可供研究:

【讨论】:

  • 用一个你推荐的 HTML 解析器而不是正则表达式来展示 Uffo 如何更好地解决他的问题的一些实际代码怎么样? (Uffo 很可能应该使用 HTML 解析器。这取决于他试图用他的 HTML 做什么。)
  • 一个来自活跃的 PHP 开发人员的例子会更好——这些天我很少使用它,而这些链接只是来自谷歌——我添加这个答案比我留下的评论更有帮助这个问题,但期待 PHP 开发人员会提供更彻底的东西。
【解决方案2】:

搜索这个正则表达式:

(<any_html_element>.*?)</br>

并替换为:

$1

如果两个标签之间可能存在换行符,请打开单行模式。你可以在 PHP 中使用 /s 来做到这一点。

如果使用 any_html_element 您的意思是要允许任何元素,请使用此正则表达式:

(<\w[^<>]+>.*?)</br>

替换文本保持不变。

虽然您不能仅使用一个正则表达式来解析 HTML,但 Uffo 并没有尝试解析 HTML。他只想删除一个标签。一个正则表达式就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多