java - 忽略正则表达式术语的拆分?

标签 java regex string

我有一个字符串,它是 StringRegex 的组合。我想拆分给定的字符串并将其存储到 Array 中,但不想拆分正则表达式术语。正则表达式可以出现在字符串中的任何位置。 / 表示正则表达式模式的开始和结束。

示例:

  1. Hello World /[0-9]{4}[ K][a-z]{2}/
  2. /^[a-z]{5,10}/ session
  3. 开始/[A-Z]) ^[0-9]{3}/准备

这就是我现在所拥有的

private static final Pattern ignoreSpaceInRegex = 
            Pattern.compile("\\s+", Pattern.UNICODE_CHARACTER_CLASS);
public static String[] getEachWord(String givenString) {
    return ignoreSpaceInRegex.split(givenString);
}

最佳答案

您可以将任务切换为使用正则表达式,而不是 Pattern.split(),它会查找字符串中的所有单词。因此你可以使用这个正则表达式:

/[^/]+?/|\S+

这匹配正则表达式(假设它以 / 开头和结尾)或单词(没有空格)。完整的方法如下:

private static final Pattern FIND_WORDS_PATTERN =
        Pattern.compile("/[^/]+/|\\S+", Pattern.UNICODE_CHARACTER_CLASS);

public static List<String> getEachWord(String givenString) {
    List<String> words = new ArrayList<>();
    Matcher m = FIND_WORDS_PATTERN.matcher(givenString);
    while (m.find()) {
        words.add(m.group());
    }
    return words;
}

您的示例的结果如下:

  1. Hello World /[0-9]{4}[ K][a-z]{2}/:

    ["Hello", "world", "/[0-9]{4}[ K][a-z]{2}/"]
    
  2. /^[a-z]{5,10}/ session :

    ["/^[a-z]{5,10}/", "meetings"]
    
  3. 开始/[A-Z]) ^[0-9]{3}/准备:

    ["Start", "/[A-Z]) ^[0-9]{3}/", "prepration"]
    

关于java - 忽略正则表达式术语的拆分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56788716/

相关文章:

javascript - 如何使用正则表达式匹配没有顶级域的链接?

java - 为什么对字符串的引用与其他对象引用的行为不同?

C - 如何在没有 string.h 和动态内存分配的情况下连接字符串

java - 如何更改所有屏幕上的背景图像并保留更改

javascript - 将 HTML5 正则表达式模式转换为 javascript 正则表达式

java - 如何参数化 Maven surefire 插件以便我可以选择要运行的 TestNG 套件

java -\G 在 .split 中如何工作?

Java:从字符串中获取 float 和字符串值

java - 使用流收集时 jdk8 与 jdk11 的不同行为

java - 如何将十进制值格式化为小时和分钟?