我有这句话重复:
<ul class="lista_3">
<ul class="lista_3">
<ul class="lista_3">
它如何只匹配第一个搜索结果?我怎样才能匹配第二个搜索结果?
答案 0 :(得分:2)
使用3个捕获组,你可以用1&#39;在文件中查找&#39;替换
例如:
找到:(<ul class="lista_3">)(\s+)(\1)(\s+\1)
替换为:<ul class="lista_1">\2<ul class="lista_2">\4
搜索模式:正则表达式
如果这些重复标签之间有文本(除换行之外),那么标签之间的文本也需要被捕获,因此可以在替换字符串中使用。
找到:(<ul class="lista_3">)(.*?)(\1)(?=.*?\1)
替换为:<ul class="lista_1">\2<ul class="lista_2">
搜索模式:正则表达式(已选中. matches newlines
)
请注意,这次使用了一个积极的前瞻 因为它不像最后一个需要更换 它只是检查那个反向引用的捕获组1的确是第3个。
但是,如果该组有更多重复,那么我认为应该在没有前瞻的情况下完成。
找到:(<ul class="lista_3">)(.*?)(\1)(.*?\1)
替换为:<ul class="lista_1">\2<ul class="lista_2">\4
搜索模式:正则表达式(已选中. matches newlines
)
答案 1 :(得分:2)
要匹配并替换第一个匹配项,您需要记住正则表达式引擎从左到右匹配,并且Notepad ++正则表达式引擎需要使用整个文档以便不在下一行重试。
启用 .
匹配换行符选项并使用
<ul class="lista_3">(.*)\z
其中<ul class="lista_3">
是文字文本,(.*)
是ID为1的捕获组,匹配文档末尾的任何0+字符(\z
)。请注意,如果您需要替换第一个匹配项,请使用<ul class="Moja_nowa_lista_1">$1
之类的内容(其中$1
是捕获值的反向引用)。
要匹配并替换第二个匹配项,您需要先匹配第一个匹配项,然后使用回火贪婪标记或惰性点匹配。
\A(.*?<ul class="lista_3">.*?)<ul class="lista_3">(.*)\z
或(带有顽固的贪婪令牌)
\A((?:(?!<ul class="lista_3">).)*<ul class="lista_3">(?:(?!<ul class="lista_3">).)*)<ul class="lista_3">(.*)\z
并替换为$1<ul class="Moja_nowa_lista_2">$2
。