Java - 正则表达式不起作用

wow*_*ick 0 java regex

我有一个字符串,"abc123("并想检查是否包含一个或多个不是数字或字符的字符.

"abc123(".matches("[^a-zA-Z0-9]+");在这种情况下应该返回true吗?但它没有!怎么了?

我的测试脚本:

public class NewClass {
    public static void main(String[] args) {
        if ("abc123(".matches("[^a-zA-Z0-9]+")) {
            System.out.println("true");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

unh*_*ler 5

在Java中,表达式必须匹配整个字符串,而不仅仅是它的一部分.

myString.matches("regex")返回true或false,具体取决于字符串是否可以完全由正则表达式匹配.重要的是要记住,如果整个字符串可以匹配,String.matches()只返回true.换句话说:"正则表达式"的应用就好像你用字符串锚点的开头和结尾写了"^ regex $".资源

你的表达式正在寻找字符串的一部分,而不是整个事物.您可以将表达式更改为.*YOUR_EXPRESSION.*,它将展开以匹配整个字符串.