Notepad++正则搜索如何避免匹配已存在的<?Pub Dtl?>标签防止重复插入
正则修改方案
原正则失效原因
- 你最初写的
(.+?)虽然是惰性匹配,但没有限制匹配范围,只要后面能找到>(<title>|<isempty\/>)的结构就会停止匹配。当已经存在<?Pub Dtl?>时,(.+?)会把pgblk闭合>到title/isempty前的所有内容都吞进第一个捕获组,导致已经加了标签的内容也被匹配,出现重复插入的问题。 - 你修改的
[>?]只是匹配单个>或?字符,没有从根源限制捕获组的匹配范围,所以没有效果。
可用正则方案
搜索正则
(<pgblk chapnbr[^>]+>)(?!<\?Pub Dtl\?>)(<title>|<isempty\/?>)
替换规则
\1<?Pub Dtl?>\2
逻辑说明
[^>]+:匹配除了>之外的任意字符,保证第一个捕获组只会匹配完整的pgblk起始标签,到标签闭合的>就停止,不会吞掉后续内容(?!<\?Pub Dtl\?>):否定前瞻断言,只有pgblk标签后面没有紧跟<?Pub Dtl?>时才会匹配,已经插入过标签的内容会被自动跳过,避免重复插入<isempty\/?>兼容自闭合和非自闭合的isempty标签写法
内容的提问来源于stack exchange,提问作者pipout64
相关产品推荐
相关产品推荐

