我想在<span...>
的html中替换所有<span id="...
(包括<span class="...
和<span>
),除非跨度以<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)[^>]*?>
答案 0 :(得分:2)
已更新:要在id="textmarker
和所有其他id="anythingelse
包括span
时排除(<span(?! *id="textmarker)[^>]*>)
:
version 2
在您发布的示例位于:https://regex101.com/r/yT9jG2/2,在顶部,选择(<span(?! *id="textmarker)[^>]*>)
,设置字段:
g
version 2
使用您的示例并选择id="textmarker
,匹配9并在右侧列出它们,包括空跨度和非<span id="YellowType">
,例如(
第1场:
)
和(
。为了教育目的,在表达式中添加了一个额外的外括号,仅用于利用regex101的匹配组列表功能在右窗格中列出结果以及匹配的默认内联突出显示。使用Notepad++时,您当然可以省略这些外)
<span
个括号。<span
:匹配(?!
*
为以下内容启动否定前瞻声明,id="textmarker
意味着空间为零或更多次,以防您有额外的空格)
[^
结束否定前瞻声明not of of the following
启动排除设置。所以>
,以下是]
*
停止定义排除[^>]
以匹配前面的0次或更多次。前面是>
g
以匹配open-a-span标记的结尾Field 2
jmh
告诉regex101你希望这是一场贪婪的比赛