0

我非常接近理解正则表达式。我有点难过,我以为我理解懒惰和贪婪。

这是我当前的正则表达式:<g_n><!\[CDATA\[([^]]+)(?=]]><\/g_n>)

我当前的正则表达式使:

<g_n><![CDATA[xxxxxxxxxx]]></g_n>

匹配:

   <g_n><![CDATA[xxxxxxxxxx

但我想让它像这样匹配:

xxxxxxxxxx
4

3 回答 3

1

你要

<g_n><!\[CDATA\[(.*?)]]></g_n>

那么如果你想替换它使用

\1 

在替换盒中

您匹配整个字符串, .*? 周围的括号 匹配所有这些并将其放入 \1 变量中

所以匹配将是所有带有 \1 的字符串,指的是你想要的

更改 xxxx

正则表达式:

(<g_n><![CDATA[)(?:.*?)(]]></g_n>) 

替代品

\1WHAT YOU WANT TO CHANGE TO\2
于 2013-06-01T00:17:05.457 回答
0

看起来您需要在两个右方括号中添加转义斜杠,因为它们是您正在解析的字符串中的文字。

<g_n><!\[CDATA\[.*+?\]\]><\/g_n>
                    ^ ^ 

任何未被反斜杠转义的方括号都将被视为正则表达式操作括号,在这种情况下不会捕获输入字符串。

编辑,我认为+?是多余的。

\[.*\]\]> ...

应该足够了,因为 .* 表示任何字符,任何次数。

于 2013-06-01T00:12:17.500 回答
0

用记事本++ 6.3.2 测试:

find: (<g_n><!\[CDATA\[)([^]]+)(?=]]></g_n>)
replace: $1WhatYouWant

您可以替换模式中的+by*以匹配 void CDATA:

<g_n><![CDATA[]]></g_n>
于 2013-06-01T00:26:12.983 回答