仅使用正则表达式方法、方法 String.replaceAll 和 ArrayList 我如何将字符串拆分为标记,但忽略引号内存在的分隔符?分隔符是任何不是字母数字或引用文本的字符
例如:字符串:
你好^world'这个*有两个标记'
应该输出:
- 你好
- worldthis* 有两个标记
我知道已经存在一个该死的好且公认的答案,但我想添加另一种基于正则表达式(我可以说更简单)的方法来使用不在单引号内的任何非字母数字分隔符拆分给定文本
正则表达式:
/(?=(([^']+'){2})*[^']*$)[^a-zA-Z\\d]+/
这基本上意味着如果非字母数字文本后跟偶数个单引号,则匹配非字母数字文本,换句话说,如果它在单引号之外,则匹配非字母数字文本。
代码:
String string = "hello^world'this*has two tokens'#2ndToken";
System.out.println(Arrays.toString(
string.split("(?=(([^']+'){2})*[^']*$)[^a-zA-Z\\d]+"))
);
输出:
[hello, world'this*has two tokens', 2ndToken]
演示:
You cannot in any reasonable way. You are posing a problem that regular expressions aren't good at.
不要为此使用正则表达式。它行不通。改为使用/编写解析器。
您应该为正确的任务使用正确的工具。