基于Java split的精确正则表达式匹配

标签 java regex split

所以我有这个代码用于演示目的:

    String input = "abcRANDOM STRINGabc";

    String arr[] = input.split("abc");
    System.out.println(Arrays.toString(arr));
    // output: [, RANDOM STRING]

    arr = input.split("(?=(abc))|(?<=(abc))");
    System.out.println(Arrays.toString(arr));
    // output: [abc, RANDOM STRING, abc]

    arr = input.split("(?=([abc]+))|(?<=([abc]+))");// wrong syntax
    System.out.println(Arrays.toString(arr));
    // output: [a, b, c, RANDOM STRING, a, b, c]

第一个将根据“abc”的精确匹配进行拆分,但不会返回导致空单元格的匹配。

第二个将在“abc”完全匹配时拆分,但不会丢失匹配。

我想要第三个版本的修改版本或完全不同的版本,并且不会丢失无限量的 [abc] 序列。

例如,如果我有这个字符串“aaaaabbRANDOMSTRINGabcabc” 预期输出:[aaaaabb,RANDOMSTRING,abcabc]

最佳答案

这有效:

String input = "aaaaabbRANDOMSTRINGabcabc";
String arr[] = input.split("(?<=[abc])(?![abc])|(?<![abc])(?=[abc])");
System.out.println(Arrays.toString(arr));
// output: [aaaaabb, RANDOMSTRING, abcabc]

您的 split 点如下:

  • 前面是[abc],后面没有[abc]
  • 前面没有 [abc],后面是 [abc]

关于基于Java split的精确正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48668834/

相关文章:

java - 使用继承的重载方法

regex - 寻找猫王? :

ruby - 如何将文本文件读入数组数组(每个子数组都是文本文件中的一行?)

java - 在 Java/JSP 中处理西类牙字符

java - 如何从 Intellij 中的 src 文件夹访问 Gradle 项目的 build 文件夹中生成的类

java - 有没有一种方法可以在 Hibernate 中加载对象而无需编写查询或具有 ID?

sql - 将包含时间范围的行切成多行(棘手的 sql 问题)

r - 如何通过匹配引用值来替换子字符串值

Python re.sub 使用非贪婪模式 (.*?) 和字符串结尾 ($) 它变得贪婪了!

javascript - 多个条目后字符串替换然后拆分