gpt4 book ai didi

html - 正则表达式匹配不包含字符串的字符串

转载 作者:行者123 更新时间:2023-11-27 23:33:27 25 4
gpt4 key购买 nike

我想替换所有的<span...> (包括 <span id="...<span class="... )在 html 中 <span>除非跨度以 <span id="textmarker 开头(例如我不想保留这个跨度:<span attr="blah" id="textmarker">)

我试过建议的正则表达式 herehere ,我终于想出了这个从不返回 <span id="textmarker 的正则表达式但不知何故,它有时会错过其他跨度:

<span(?!.*? id="textmarker).*?">

你可以在这里看到我的(简化的)html:https://regex101.com/r/yT9jG2/2

奇怪的是,如果我在 notepad++ 中运行正则表达式,它会返回 3 个匹配项(第二段中的三个跨度),但 regex101 只返回 1 个匹配项。 Notepad++ 和 regex101 都错过了第一段中的跨度。

这个正则表达式也不会返回它应该返回的每个跨度(参见带有灰色突出显示的跨度 here

<span(?![^>]*? id="textmarker)[^>]*?>

最佳答案

更新:排除id="textmarker同时包括 id="anythingelse和所有其他span小号:

(<span(?! *id="textmarker)[^>]*>)

在您发布的示例中:https://regex101.com/r/yT9jG2/2 ,并在顶部选择 version 2 ,这样设置字段:

  • 字段 1:(<span(?! *id="textmarker)[^>]*>)
  • 字段 2(可让您设置修饰符的较小字段):g

以您的示例并选择 version 2 , 匹配 9 并在右侧列出它们,包括空范围以及非 id="textmarker例如<span id="YellowType">

解释

字段 1:

  • 可选:() .出于教育目的,在表达式中添加了一个额外的外括号,只是为了利用 regex101 的匹配组列表功能,除了默认的内联匹配突出显示之外,还在右 Pane 中列出结果。使用 Notepad++ 时你当然可以省略这些外部 ( )括号。
  • <span : 匹配<span
  • (?!为以下内容启动否定前瞻断言,
  • *表示空间零次或多次,以防你有额外的空间
  • 其次是 id="textmarker
  • )结束否定前瞻断言
  • 因此,如果匹配看到否定的先行断言,它会自动将其作为匹配丢弃
  • [^启动排除集。所以not of of the following , 以下为 >
  • ]停止定义排除
  • *匹配前面的 0 次或更多次。前面是 [^>]
  • >匹配到 open-a-span 标签的结尾

字段 2

  • g告诉 regex101 你希望这是一个贪婪的匹配
  • 所以结果不会停在第一场比赛,而是会有所有比赛

关于html - 正则表达式匹配不包含字符串的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34816515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com