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