查找和替换的问题

时间:2015-08-06 06:43:29

标签: regex xml regular-language

嘿stackoverflow社区。我需要大量信息文件的帮助。是否可以使用正则表达式在此标记中找到:

<category_name><![CDATA[Prekiniai ženklai&gt;Adler|Kita buitinė technika&gt;Buičiai naudingi prietaisai|Kita buitinė technika&gt;Lygintuvai]]></category_name>

以某种方式替换所有其他数据,只留下“Adler&#39;或者&#39; Lygintuvai&#39;。我使用Altova编辑xml文件,所以我找不到其他方式然后查找 - 替换。而且我是正则表达式的新东西。所以我认为maby你可以帮助我。

2 个答案:

答案 0 :(得分:2)

@\<category_name\>.+?gt\;([\w]+?)\|.+?gt;([\w]+?)\]\]\>\<\/category_name\>@i
\1 - Adler
\2 - Lygintuvai

PHP

regex101.com

字段可能包含不带空格的字母数字字符。

如果要修改可接受字符的范围,请将[\ w]更改为其他字符: [a-z] - 只有字母 [0-9] - 仅限数字 等

答案 1 :(得分:2)

这是可能的,但使用正则表达式来处理XML将永远不会100%正确(你可以证明使用计算机科学理论),它也可能是非常低效的。例如,Luk给出的解决方案是不正确的,因为它不允许在XML允许的地方使用空格。使用XQuery或XSLT要好得多,这两者都是为工作而设计的(并且都在Altova中工作)。然后,您可以使用XPath表达式来定位您感兴趣的元素或属性节点,并且仍然可以使用正则表达式(例如,在XPath replace()函数中)来处理文本或属性节点的内容。

顺便提一下,你的输入很奇怪,因为它在CDATA部分中使用&gt;之类的转义序列;但是CDATA部分无法识别XML转义序列。