正则表达式在regexpal中工作但不在Java中工作

时间:2012-04-17 03:18:23

标签: java regex

我有一个简单的正则表达式,它搜索一个句子,看它是否包含| for | in | at的单词,这里是我的正则表达式几乎在regexpal中工作:

[^ A-ZA-Z]的|为|在|于[^ A-ZA-Z]

我按以下方式运行:

show me the weather of seattle
show me the weather in seattle
show me the weather for seattle
show me the weather at seattle

以下是结果:

enter image description here

当我在我的Java代码中使用它时它根本不起作用。在regexpal中也显示了for和我在开始和结束时定义的空间。有人可以告诉我的正则表达式有什么问题,以及如何搜索句子中的许多单词之一

我总是在我的java中得到其他条件,这意味着它不匹配正则表达式。这是我的java代码:

public class Regex 
{
public static void main(String[] args)
{
    String str = "show me the weather in seattle";

    if(str.matches("[^A-Za-z]of|for|in|at[^A-Za-z]")){
        System.out.println("Yayyy!!");
    }
    else{
        System.out.println("OMG now what to do");
    }       
}
}

2 个答案:

答案 0 :(得分:1)

[^A-Za-z](?:of|for|in|at)[^A-Za-z]

您想要对“或”匹配进行分组,否则它会认为您的意思是:

[^A-Za-z]of  OR  for  OR  in  OR  at[^A-Za-z]

很可能不是你想要的。

答案 1 :(得分:1)

这不起作用.*[^A-Za-z](of|for|in|at)[^A-Za-z].*吗?当然,你需要额外检查边界情况,其中| for | in | at是单词的开头或结尾。