为什么这个String不匹配这个正则表达式?

时间:2013-01-16 14:25:29

标签: java regex string

我有以下代码:

public class testMatch {

    public static void main(String[] args) {
        String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
        String expression = "3";
        if (dummyMessage.matches(expression)){
            System.out.println("MATCH!");
        } else {
            System.out.println("NO MATCH!");
        }

    }
}

我希望这是一个成功的匹配,因为dummyMessage包含表达式3但是当我运行这个代码片段时,代码打印出NO MATCH!

我不知道我做错了什么。

好的停止回答! 。* 3. *作品 这是一个过度简化我在一些实时代码中的问题,正则表达式是可配置的,直到现在匹配整个字符串已经没问题,我现在必须匹配字符串的一部分,并想知道为什么它不是工作。

11 个答案:

答案 0 :(得分:9)

它与整个字符串匹配,即在大多数其他正则表达式实现中与^3$类似。因此3与例如333不符.*3.*或您的字符串。但dummyMessage.contains(expression)可以胜任。

但是,如果您只想测试字符串中是否包含“3”,则根本不需要正则表达式。请改用{{1}}。

答案 1 :(得分:3)

String#matches(regex)判断此字符串是否与给定的正则表达式匹配。 你的字符串dummyMessage与表达式不匹配,因为它试图检查dummyMessage是否为3你可能需要String.contains(charseq)

 String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
            String expression = "3";
            if (dummyMessage.contains(expression)){
                System.out.println("MATCH!");
            } else {
                System.out.println("NO MATCH!");
            }

答案 2 :(得分:2)

您应该匹配matches的整个字符串以返回true。也许尝试使用.*3.*

答案 3 :(得分:2)

它将匹配此类正则表达式:.*3.*

答案 4 :(得分:2)

使用contains(表达式)

 String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
        String expression = "3";
        if (dummyMessage.contains(expression)) {
            System.out.println("MATCH!");
        } else {
            System.out.println("NO MATCH!");
        }

答案 5 :(得分:1)

默认情况下String#matches()测试字符串是否完全匹配正则表达式。为了使它工作替换

expression = "3"

expression = ".*3.*"

匹配字符串中的子字符串使用Matcher#find()方法。

答案 6 :(得分:1)

你的正则表达式应该是.*3.*

答案 7 :(得分:1)

String类的matches()方法检查整个字符串是否匹配。 我将您的代码修改为:

public class testMatch
{

    public static void main(String[] args)
    {
        String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
        String expression = ".*3.*";
        if (dummyMessage.matches(expression))
        {
            System.out.println("MATCH!");
        }
        else
        {
            System.out.println("NO MATCH!");
        }

    }
}

现在可行了

答案 8 :(得分:1)

您可能正在寻找matcher.find

String message = "asdfasdfsadfsadfasdf 3 sdfasdf3asdfasdf";
String expression = "3";

// Really only need to do this once.
Pattern pattern = Pattern.compile(expression);
// Do this once for each message.
Matcher matcher = pattern.matcher(message);
if (matcher.find()) {
  do { 
    System.out.println("MATCH! At " + matcher.start() + "-" + matcher.end());
  } while ( matcher.find() );
} else {
  System.out.println("NO MATCH!");
}

答案 9 :(得分:0)

相应地更改原始正则表达式 - 它当前不正确且不匹配:

String expression = "(.*)3(.*)";

或者只使用String.contains() - 我认为这更适合这种情况。

答案 10 :(得分:0)

你要么这样做:

String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
String expression = "3";
Pattern p = Pattern.compile(".*3.*");
Matcher m = p.matcher(dummyMessage);
boolean b = m.matches();
if (b) {
    System.out.println("MATCH!");
}
else {
    System.out.println("NO MATCH!");
}

或者这样:

String dummyMessage = "asdfasdfsadfadfasdf 3 sdfasdfasdfasdf";
String expression = "3"
if (dummyMessage.contains(expression)) {
    System.out.println("MATCH!");
}
else {
    System.out.println("NO MATCH!");
}