Java正则表达式:匹配多个单词边界

Java正则表达式:匹配多个单词边界,java,regex,Java,Regex,我想在课文中匹配几个单词。有以下几点: if ( Pattern.matches(".*\\b" + placeSub.toLowerCase() + "\\b" + placeSup.toLowerCase() + "\\b.*", sourceText.toLowerCase()) ) { System.out.println( String.format("Matched %s on %s", placeSub, placeSup) ); } 变量placeSub

我想在课文中匹配几个单词。有以下几点:

if ( Pattern.matches(".*\\b" + placeSub.toLowerCase() + "\\b" + placeSup.toLowerCase() + "\\b.*", sourceText.toLowerCase()) ) {
    System.out.println( String.format("Matched %s on %s", placeSub, placeSup) );        
}
变量
placeSub
placeSup
sourceText
是动态的(运行时)

上面的代码不起作用(不匹配)。但是,以下匹配项:

if ( Pattern.matches(".*\\b" + placeSub.toLowerCase() + "\\s" + placeSup.toLowerCase() + "\\b.*", sourceText.toLowerCase()) ) {
   System.out.println( String.format("Matched %s on %s", placeSub, placeSup) ); 
}
为什么文本能够匹配
\\s
而不能匹配
\\b

输入示例:

  • placeSub:
    南部

  • placeSup:
    苏丹

  • 源文本:
    在南苏丹北部统一州的激战中,数万人逃离了战场


  • 您应该实际使用:

    Pattern.matches(
       ".*?\\b" + placeSub.toLowerCase() + "\\b\\W+\\b" + placeSup.toLowerCase() + "\\b.*",
       sourceText.toLowerCase())
    
    这将转化为:

    /.*?\bsouth\b\W+\bsudan\b.*/i
    

    有了
    placeSub
    =
    South
    placeSup
    =
    Sudan
    ,两者之间不可能只有一个
    \b
    。但是,在示例中有一个空格,这就是为什么
    \s
    匹配。为什么需要
    *
    在那里?我应该如何匹配由未知字符分隔的两个单词?南苏丹就是一个例子。如果它们必须是单独的单词,@MugomaJ.Okomba:
    /word\b.*\bword/
    *
    匹配之前和之后的任何内容。我本可以使用
    ^
    &
    $
    ,但我更愿意将表达式保持打开状态。看起来我需要的是
    \\b\\W+\\b
    。谢谢@anubhava