【发布时间】:2016-04-21 08:50:34
【问题描述】:
我想用<span> 替换html 中的所有<span...>(包括<span id="... 和<span class="...),除非跨度以<span id="textmarker 开头(例如,我不想保留这个跨度:<span attr="blah" id="textmarker">)
我已经尝试了here 和here 提出的正则表达式,我终于想出了这个永远不会返回<span id="textmarker 的正则表达式,但不知何故它有时会错过其他跨度:
<span(?!.*? id="textmarker).*?">
您可以在此处查看我的(简化的)html:https://regex101.com/r/yT9jG2/2
奇怪的是,如果我在 notepad++ 中运行正则表达式,它会返回 3 个匹配项(第二段中的三个跨度),但 regex101 只返回 1 个匹配项。 Notepad++ 和 regex101 都错过了第一段的跨度。
这个正则表达式也不会返回它应该返回的每个跨度(参见带有灰色突出显示的跨度here
<span(?![^>]*? id="textmarker)[^>]*?>
【问题讨论】:
-
错误 #1:使用正则表达式来操作 html。你应该使用 DOM 解析器。
-
您只想排除以
id=...开头的spans,还是要排除spans,其中id=...不是第一个属性? -
@Brendan,我已经编辑了问题
-
<span attr="blah" id="textmarker">呢? -
@BrendanAbel 感谢您帮助我更精确,请参阅问题中的编辑。