java Regex - 拆分但忽略引号内的文本?

标签 java regex

只使用正则表达式方法,方法String.replaceAll和ArrayList 如何将字符串拆分为标记,但忽略引号内存在的定界符? 分隔符是任何非字母数字或引号文本的字符

例如: 字符串:

hello^world'this*has two tokens'

应该输出:

  • hello
  • worldthis*has two tokens

最佳答案

我知道已经有一个该死的好并且被接受的答案,但我想添加另一个基于正则表达式的方法(我可以说更简单)来使用任何非字母数字定界符分割给定的文本,该定界符不在单引号内使用

正则表达式:

/(?=(([^']+'){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]

演示:

Here is a live working Demo of the above code.

关于java Regex - 拆分但忽略引号内的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10864537/

相关文章:

java - 在 64 位中启动 Intellij-IDEA 时 Jvm 错误 -6

regex - (0-9) 是 unix 中有效的正则表达式吗?

asp.net - 更改密码控制正则表达式仅在 IE 7 中奇怪地验证

java - 无法替换包含特殊字符的字符串

java - MS SQL Server 的 JBoss AS 5 数据库连接池重新连接例程

java - 在 Java 中,如何测试对象的监视器是否使用传统的低级锁定机制锁定?

java - 为什么相同的 Python/Java 代码之间会有如此巨大的性能差异?

java - Java 中的 XMLRPC 调用不带参数的方法?

c++ - re2 库加载

java - 编写正则表达式来检测重复字符