Java 用于匹配#<string>vs<string> 的正则表达式

Java regex for matching #<string>vs<string>

我有一个字符串 "Waiting for match #indvspak and #indvsaus",我想分别匹配字符串 "#indvspak""#indvsaus"。 我正在使用以下正则表达式 (^|)#.*vs.+?\s\b。但它匹配从井号开始的整个字符串。我怎样才能达到我的要求请帮助。

我想匹配以 # 开头的包含 vs 的字符串,并且整个字符串前面必须有一个非 space 字符。

"(?<!\S)#\S*vs\S+"

(?<!\S) 否定后视断言匹配之前不会出现非 space 字符。

代码:

String s = "Waiting for match #indvspak and #indvsaus";
Matcher m = Pattern.compile("(?<!\S)#\S*vs\S+").matcher(s);
while(m.find())
{
    System.out.println(m.group());
}

输出:

#indvspak
#indvsaus

你需要这个正则表达式:

#[^\s]+

它匹配(包括)# 之后的任何内容,但不匹配空格。

编辑:

正如@AvinashRaj 所建议的,如果你想确保 "vs" 出现在主题标签中,你应该使用否定的后视。

我强烈建议您查看 String API,有很多方法可以帮助您解决问题。

已编辑

(复制自其他答案评论)

使用这个:

"(?<!\B)#\w+vs\o/\S#vas\S-[]"

简单...