1

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

[^A-Za-z]of|for|in|at[^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

这是结果:

在此处输入图像描述

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

我总是在我的 java 中得到 else 条件,这意味着它不匹配正则表达式。这是我的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");
    }       
}
}
4

2 回答 2

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

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

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

这很可能不是您想要的。

于 2012-04-17T03:24:03.810 回答
1

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

于 2012-04-17T04:35:09.230 回答