Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 记事本中的正则表达式++;替换<;及>;内部CDATA_Regex_Xml_Notepad++ - Fatal编程技术网

Regex 记事本中的正则表达式++;替换<;及>;内部CDATA

Regex 记事本中的正则表达式++;替换<;及>;内部CDATA,regex,xml,notepad++,Regex,Xml,Notepad++,我正在使用Notepad++修复一个巨大的XML导出文件,这里的挑战之一是将所有字符替换为和。问题是,我不能简单地使用replaceall操作,因为XML文件中充满了不能更改的 幸运的是,我需要更改的所有都由CDATA标记包装,如下所示: <![CDATA[Text here... <span class="vSpecial"><p>Special Offer - more text here!</p></span>]]> 特别优惠-

我正在使用Notepad++修复一个巨大的XML导出文件,这里的挑战之一是将所有
字符替换为
。问题是,我不能简单地使用replaceall操作,因为XML文件中充满了不能更改的

幸运的是,我需要更改的所有
都由CDATA标记包装,如下所示:

<![CDATA[Text here... <span class="vSpecial"><p>Special Offer - more text here!</p></span>]]>
特别优惠-此处有更多文字

]]>
我想知道是否有一个正则表达式来识别CDATA内容中的
,这样我就可以轻松地使用“全部替换”来仅更改它们

更新

CDATA的内容可以包含换行符。

Code

*?\K(?:()) 替换:
(?{1})(?{2})

注意:出于显示目的,上面的链接使用
\G(?!\A)
。这在记事本++中不受支持,因此在实际答案中被删除。我将其添加到链接中,以显示其基本功能

有关更多信息,请参阅。它提到以下几点:

对于那些熟悉Perl的读者,不支持
\G


结果 之前

之后


解释 反复单击
Replace All
,直到底部的消息显示
Replace All:0个匹配项被替换。
它将替换找到的每个
CDATA
的第一个匹配项、第二个匹配项、第三个匹配项等

图案
  • 按字面意思匹配
  • (?:(?!\]\]>)*?
    多次匹配任何字符,但尽可能少地确保以下内容不匹配
    ]>
  • \K
    重置报告匹配的起点。任何以前使用的字符将不再包含在最终匹配中
  • (?:())
    匹配以下任一项
    • 逐字输入捕获组2
替换
记事本++允许条件替换,因此
(?{1})
引用捕获组1和
(?{2})
引用了捕获组2。

它工作得很好!非常感谢!只是一个问题,此问题的“全部替换”并不是一次性全部替换。每次单击此选项都只替换一个而不是整个文档。这是与此正则表达式相关还是我遗漏了什么?@AdrianoCastro I答案。记事本++不支持
\G
,很遗憾,因此您唯一的选择是反复单击
替换所有
,直到您收到我在答案中指定的消息。如果支持
\G
,您可以在regex101链接中使用regex(我的答案中代码部分的顶部)然后单击一次以替换每个事件。谢谢!顺便说一句,我想你在更新答案时意外更改了正则表达式。它是
(?:)*?\K(?())
,现在是
)*?\K(?:())
@AdrianoCastro我在代码部分做了一个注释。我意识到Notepad++不支持
\G
,所以我删除了它,这也是为什么你不能简单地做一个“全部替换”的原因。
<!\[CDATA\[)(?:(?!\]\]>).)*?\K(?:(<)|(>))