NOTEPAD ++ REGEX - 我无法得到两个字符串之间的内容,我不明白

时间:2013-06-01 00:09:18

标签: regex notepad++

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

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

我现在的正则表达式:

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

匹配:

   <g_n><![CDATA[xxxxxxxxxx

但我想让它像这样匹配:

xxxxxxxxxx

3 个答案:

答案 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>