我非常接近理解正则表达式。我有点难过,我以为我理解懒惰和贪婪。
这是我当前的正则表达式:<g_n><!\[CDATA\[([^]]+)(?=]]><\/g_n>)
我当前的正则表达式使:
<g_n><![CDATA[xxxxxxxxxx]]></g_n>
匹配:
<g_n><![CDATA[xxxxxxxxxx
但我想让它像这样匹配:
xxxxxxxxxx
你要
<g_n><!\[CDATA\[(.*?)]]></g_n>
那么如果你想替换它使用
\1
在替换盒中
您匹配整个字符串, .*? 周围的括号 匹配所有这些并将其放入 \1 变量中
所以匹配将是所有带有 \1 的字符串,指的是你想要的
更改 xxxx
正则表达式:
(<g_n><![CDATA[)(?:.*?)(]]></g_n>)
替代品
\1WHAT YOU WANT TO CHANGE TO\2
看起来您需要在两个右方括号中添加转义斜杠,因为它们是您正在解析的字符串中的文字。
<g_n><!\[CDATA\[.*+?\]\]><\/g_n>
^ ^
任何未被反斜杠转义的方括号都将被视为正则表达式操作括号,在这种情况下不会捕获输入字符串。
编辑,我认为+?是多余的。
\[.*\]\]> ...
应该足够了,因为 .* 表示任何字符,任何次数。
用记事本++ 6.3.2 测试:
find: (<g_n><!\[CDATA\[)([^]]+)(?=]]></g_n>)
replace: $1WhatYouWant
您可以替换模式中的+
by*
以匹配 void CDATA:
<g_n><![CDATA[]]></g_n>