正则表达式将句子与一个变量词匹配

时间:2009-09-26 07:25:05

标签: java regex

如何使用正则表达式匹配单词列表。

就像我想要匹配

This is a apple
This is a orange
This is a peach

我尝试了This is a [apple|range|peach]

不起作用。

有什么想法吗?我已经发了5个小时,发布了“规则”,但没有详尽的例子,这些规则太神秘了。

4 个答案:

答案 0 :(得分:5)

您可以使用

    Pattern pattern = Pattern.compile( "This is a (apple|orange|peach)" );

    Matcher matcher = pattern.matcher( "This is a orange" );
    if( matcher.find() ) {
        System.out.println( matcher.group( 1 ) );
    }

答案 1 :(得分:1)

This is a ((?:(?:apple|orange|peach)/?)+)

将匹配

This is a apple/orange/peach.

无论订单如何。

您将只获得一个代表所有列表的捕获组 (这里是“苹果/橘子/桃子”)。

  • '(?:apple|orange|peach)'表示:匹配这三个术语中的一个,不捕获它
  • '(?:.../?)+':匹配一个由'/'结束的字符串,多次匹配
  • '(...)':捕获所有列表。

  

这是一个苹果< -match这是一个橙色< -match这是一个桃子< -match这是一个香蕉< -no match。

This is a (apple|orange|peach)

就足够了:您尝试的[apple|orange|peach]实际上是character class,并且会匹配任何'a','p','|','o'等等。

答案 2 :(得分:0)

我不确定Java正则表达式,但它会像

/(苹果|橙色|桃子)/

即,将它们分组,并使用|说'或'。

答案 3 :(得分:0)

试试这个:

String str = "This is a peach";
boolean matches = str.matches("(apple|orange|peach)");

如果使用模式,则可以使用

String str = "This is a peach";
Pattern pat = Pattern.compile("(apple|orange|peach)");
Matcher matcher = pat.matcher(str);
boolean matches = matcher.find();