2

我有以下代码:

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.* 有效 这是我在一些实时代码中遇到的问题的过度简化,正则表达式是可配置的,到目前为止匹配整个字符串还可以,我现在必须匹配字符串的一部分并想知道为什么它不起作用。

4

11 回答 11

9

它与整个字符串匹配,即与^3$大多数其他正则表达式实现一样。所以3不匹配例如333或你的字符串。但.*3.*会做这项工作。

但是,如果您只想测试字符串中是否包含“3”,则根本不需要正则表达式。改为使用dummyMessage.contains(expression)

于 2013-01-16T14:27:46.327 回答
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!");
            }
于 2013-01-16T14:27:55.447 回答
2

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

于 2013-01-16T14:28:06.887 回答
2

它将匹配这样的正则表达式:.*3.*

于 2013-01-16T14:28:18.267 回答
2

使用包含(表达式)

 String dummyMessage = "asdfasdfsadfsadfasdf 3 sdfasdfasdfasdf";
        String expression = "3";
        if (dummyMessage.contains(expression)) {
            System.out.println("MATCH!");
        } else {
            System.out.println("NO MATCH!");
        }
于 2013-01-16T14:28:49.537 回答
1

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

expression = "3"

expression = ".*3.*"

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

于 2013-01-16T14:28:45.167 回答
1

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

于 2013-01-16T14:29:00.613 回答
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!");
        }

    }
}

现在它可以工作了

于 2013-01-16T14:33:25.477 回答
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!");
}
于 2013-01-16T14:39:08.783 回答
0

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

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

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

于 2013-01-16T14:29:16.300 回答
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!");
}
于 2013-01-16T14:35:16.100 回答