【问题标题】:regex matching content that's between angle brackets [duplicate]正则表达式匹配尖括号之间的内容[重复]
【发布时间】:2020-10-05 09:50:59
【问题描述】:

如何使用 php 中的 regex 和 preg_replace 将任何给定 HTML 元素内的所有多个空格转换为单个空格?

例如:<div class="myClass" jsaction="UjQMac:.CLIENT" data-id="3739" >Edit</div>

已清理:<div class="myClass" jsaction="UjQMac" data-id="3739">Edit</div> 已删除所有多个空格,仅保留单个空格。此外, > 被替换为 >

我一直在尝试使用这个正则表达式 \<(\s+)\>,但没有成功。你能帮忙吗?

编辑: 下面答案中的正则表达式(?:(\s{2,})|(\s>)) 工作正常,但仅在<> 之间不匹配

【问题讨论】:

  • 不应使用正则表达式。使用 HTML DOM 解析器
  • @anubhava 虽然我同意你的观点,但当人们尝试使用 RegEx 解析 HTML 时,我认为这种情况对于 RegEx 的使用是安全的。或者也许我错过了什么
  • @Cid 考虑这个 html <div title="3 > 2" class="myClass" jsaction="UjQMac" data-id="3739">Edit</div> 以及这可能如何使正则表达式解决方案复杂化。
  • 好点 @WesleySmith 我没有意识到 OP 想要匹配标签

标签: php regex preg-replace


【解决方案1】:

这样就可以了:(?:(\s{2,})|(\s>))

它匹配任何出现 2x 或更频繁的空白字符,以及带有前导 >

见:https://regex101.com/r/NN9YUU/2/

【讨论】:

  • 我试图让它只匹配 <> 之间的内容。这将匹配整个字符串。不过效果很好。如果您看到我在我的问题\<(\s+)\> 中使用的正则表达式。我确实尝试将您的解决方案放入我的正则表达式中,但它不起作用。
  • 你能帮忙解决< & > 部分吗?
  • @Norman 不是真的,任何正则表达式方法都注定要失败。 RegEx 不适合这种类型的应用程序。你用的任何一个,我们都能让它失败。
  • 我不会使用公众提交的数据。这只是为了清理一些博客备份中的大量乱码输出。
猜你喜欢
  • 1970-01-01
  • 2011-09-06
  • 2017-12-24
  • 2016-10-06
  • 2018-04-04
  • 2015-04-20
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
相关资源
最近更新 更多