【问题标题】:How do I change the following pattern to find all possible matches?如何更改以下模式以查找所有可能的匹配项?
【发布时间】:2017-06-15 23:48:10
【问题描述】:

我这里有一个 Java 模式

    String patternString = "(#)(.+?)([\\s,#.])";

我基本上想在给定的文本字符串中找到所有以“#”开头的单词。如果后面有结束行,则该模式匹配除最后一个单词之外的所有单词。我正在使用哈希映射来存储值。

    int x = 0;

    HashMap<Integer, String> values = new HashMap<>();

    while(matcher.find()) {
        values.put(x++, matcher.group(2));
    }

我尝试在第三个中添加一个“$”符号以匹配该组,但它似乎不起作用。如何调整模式以匹配所有以“#”开头且包含最后一个单词的单词?

【问题讨论】:

  • 考虑\b(单词边界)而不是\s,或替换为$字符串锚结尾
  • 使用String patternString = "#(\\w+)"; 并抓取.group(1)

标签: java regex pattern-matching


【解决方案1】:

除非我误解了您的要求,否则它可以简单得多。我建议使用以下模式:

(#)([^\s]+)

它匹配 # 后跟尽可能多的非空白字符。您必须更改代码以使用第 1 组而不是第 2 组,因为我的模式没有 3 个组。

根据您的具体要求,您还可以使用\w 而不是[^\s] 来匹配任何单词字符(相当于[a-zA-Z0-9_])。

【讨论】:

  • 实际上我需要紧跟在 # 之后的单词,所以我只是继续使用第 2 组。不过,该解决方案可以满足我的需要,只是做了一些小的修改。谢谢!
猜你喜欢
  • 2012-08-04
  • 2015-10-01
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多