Java中基于正则表达式的字符串分割

3
String delimiterRegexp = "(;|:|[^<]/)";
String value = "get/time/pick me <i>Jack</i>";
String[] splitedTexts = value.split(delimiterRegexp);
for (String text : splitedTexts) {
System.out.println(text);
}

Output:
ge
tim
pick me <i>Jack</i>

Expected Result: 
get
time
pick me <i>Jack</i>

一个字符被添加为分隔符,与/一起。有人能帮助我编写正则表达式来基于分隔符"/"拆分文本,它应该忽略xml结束标记。
2个回答

4
你的正则表达式应该像这样:
(;|:|(?<!<)/)

使用负回顾后发现(Negative Lookbehind), 示例: https://regex101.com/r/2k1WI5/1/ 你当前的正则表达式[^<]/会匹配任何不是<后跟/的字符,包括\n, 空格和日本字符。
这就是为什么你会失去一些字母,因为它们被视为分隔符的一部分。
根据The fourth bird的建议,你甚至可以将正则表达式简化为:([;:]|(?<!<)/)

1
也许你还可以将第一个替换项简化为 ([;:]|(?<!<)/) - The fourth bird
1
@Thefourthbird: 谢谢!它更加漂亮了! - Allan

3

[^<]/将匹配e/t/

使用后顾断言代替,它将具有所需的行为,只有在不是闭合标签时才将/视为分隔符

regex101.com

(?<!<)/
整个正则表达式
(;|:|(?<!<)/)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接