使用Java Matcher类匹配开始和结束字符

时间:2018-08-30 05:47:36

标签: java regex

我想从以#开始并以space结尾的字符串中获取单词。我尝试使用此Pattern.compile("#\\s*(\\w+)"),但其中不包含':之类的字符。

我只希望使用模式匹配方法的解决方案。

2 个答案:

答案 0 :(得分:1)

我们可以尝试使用模式(?<=\\s|^)#\\S+进行匹配,该模式将匹配以#开头的任何单词,后跟任意数量的非空白字符。

String line = "Here is a #hashtag and here is #another has tag.";
String pattern = "(?<=\\s|^)#\\S+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
while (m.find()) {
    System.out.println(m.group(0));
}

#hashtag
#another

Demo

注意:以上解决方案可能会给您带来一些极端的情况,即出现在主题标签末尾的标点符号。如果您不希望这样做,那么我们可以将正则表达式改写为只匹配肯定的某些特定字符,例如字母和数字。但是,也许这对您来说并不重要。

答案 1 :(得分:0)

\s的反义词是\S,因此您可以使用这样的正则表达式:

#\s*(\S+)

或者对于Java:

Pattern.compile("#\\s*(\\S+)")

它将捕获所有非空格。

请参见演示here

如果您想停在空格字符上并且没有任何空格,请将\S更改为[^ ]。 括号内的^表示它将否定其后的内容。

Pattern.compile("#\\s*([^ ]+)")

请参见演示here