Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 查找和替换的问题_Regex_Xml_Regular Language - Fatal编程技术网

Regex 查找和替换的问题

Regex 查找和替换的问题,regex,xml,regular-language,Regex,Xml,Regular Language,嘿,斯塔克社区。我需要帮助处理庞大的信息文件。使用正则表达式是否可以在此标记中找到: <category_name><![CDATA[Prekiniai ženklai&gt;Adler|Kita buitinė technika&gt;Buičiai naudingi prietaisai|Kita buitinė technika&gt;Lygintuvai]]></category_name> 以某种方式替换所有其他数据,只

嘿,斯塔克社区。我需要帮助处理庞大的信息文件。使用正则表达式是否可以在此标记中找到:

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

以某种方式替换所有其他数据,只留下“Adler”或“Lygintuvai”。我正在使用Altova编辑xml文件,所以我找不到其他方法来查找替换。我是新来的正则表达式。所以我想也许你能帮我。

@.+?gt\;([\w]+?)\\\\.+?gt;([\w]+?)\]\]\>\@i
@\<category_name\>.+?gt\;([\w]+?)\|.+?gt;([\w]+?)\]\]\>\<\/category_name\>@i
\1 - Adler
\2 - Lygintuvai
\1-阿德勒 \2-利金图瓦

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

如果要修改可接受字符的范围,请将[\w]更改为其他内容: [a-z]-仅限字母 [0-9]-仅限数字 等等;([\w]+?)\\\\.+?gt;([\w]+?)\]\]\>\@i \1-阿德勒 \2-利金图瓦

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

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

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


顺便说一句,您的输入非常奇怪,因为它在CDATA区域中使用了转义序列,如
;但是在CDATA区域中无法识别XML转义序列。

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


顺便说一句,您的输入非常奇怪,因为它在CDATA区域中使用了转义序列,如
;但是在CDATA区域中无法识别XML转义序列。

是的,这是可能的。是学习这些东西的好地方,这是可能的。是一个学习这些东西的好地方。我能解决这个问题吗,find replace理解为字母w或w。而不是任何单词\w-表示任何“单词”字符。如果[0-9a-z]不起作用,您应该尝试[0-9a-z]。\w如何解决此问题,find replace将\w理解为字母w或w。而不是任何单词\w-表示任何“单词”字符。如果\w不起作用,您应该尝试[0-9a-z]