在java中使用正则表达式拆分字符串时转义符号

时间:2014-08-11 14:29:08

标签: java regex string

我有一个在解析XML文档时收到的字符串:

"ListOfItems/Item[Name='Model/Id']/Price"

我需要通过分隔符拆分它 - “/” String[] nodes = path.split("/"),但有一个条件:

“如果在项目名称中存在反斜杠,如上例所示,我必须跳过此块并且不要拆分它。”

即在拆分必须获得下一个节点数组之后:

ListOfItems, Item[Name='Model/Id'], Price

如何使用正则表达式表达式?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式进行拆分:

/(?=(?:(?:[^']*'){2})*[^']*$)

RegEx Demo

这个正则表达式基本上只拆分正斜杠/,后跟偶数个单引号,换句话说,单引号内的/不匹配分裂。

答案 1 :(得分:0)

一种方法是使用find方法使用此模式,并检查最后一个匹配项是否为空。优点是您不需要添加额外的前瞻来测试字符串,直到每个可能的位置结束。您需要的项目位于捕获组1中:

\\G/?((?>[^/']+|'[^']*')*)|$

\G是一个锚点,它匹配字符串的开头或上一个匹配后的位置。使用此方法强制所有匹配都是连续的。

(?>[^/']+|'[^']*')*定义项目的可能内容:所有不是/'的内容,或引号之间的字符串。

请注意,可以改进引号之间字符串的描述以处理转义引号:'(?>[^'\\]+|\\.)*' (使用s修饰符)

$的交替只是为了确保您已经解析了所有字符串直到结束。最后一场比赛的捕获组1必须为空。如果它为null,则表示全局研究已在结束之前停止(例如,在报价不平衡的情况下)

example