使用正则表达式匹配除等号以外的任何字符

71

我正在尝试编写一个字符串验证,以匹配除 = 之外的任何字符(常规字符、数字和特殊字符)。

这是我已经编写的代码 -

    String patternString = "[[^=][\\w\\s\\W]]*";
    Pattern p = Pattern.compile(patternString);
    Matcher m = p.matcher(str);

    if(m.matches())
        System.out.println("matches");
    else
        System.out.println("does not");

但是,它与输入字符串 "2009-09/09 12:23:12.5=" 匹配。

我如何从模式字符串中排除 =(或任何其他字符)?


2
你想匹配什么?(或者不匹配什么)?只有 [^=]* 可以匹配除了 '=' 字符以外的任何字符。 - Guillaume Polet
1
您不能嵌套字符类。[[]只是一个由单个字符[组成的字符类。 - tripleee
[^=]* 正则表达式模式将匹配除 = 以外的任何字符。 - Ahmed Nabil
4个回答

111
如果仅禁止使用等号,像[^=]*这样的表达式就可以工作。 [^...]是一个否定字符类;它匹配除方括号中列出的字符之外的任何单个字符。*重复该表达式零次或多次。

2
我该如何使 [^=]* 匹配 \n 呢? - Cameron Hudson
不是Java专业人士,但我的第一个搜索引擎匹配结果是https://dev59.com/f3A75IYBdhLWcg3wJFmY#30315738。 - tripleee
嗯,谢谢,但我的特定用例是在VSCode中进行搜索和替换。 - Cameron Hudson
@CameronHudson 刚刚遇到了同样的问题,使用替代方法对我有用:([^=]|[\n])* - undefined

12

首先,你不需要使用正则表达式。只需调用contains方法即可:

if(str.contains("="))
    System.out.println("does not");
else
    System.out.println("matches");
您要寻找的正确正则表达式只是:
String patternString = "[^=]*";

8
这对原贴发布者可能非常有帮助。但是这个回答与问题的具体文本相距甚远,这会吸引成千上万其他人来到这个页面,而这个回答对他们的价值要小得多。 - ctpenrose

9
如果你的目标是在字符串中不含有任何“=”字符,请尝试以下操作。
String patternString = "[^=]*";

3
如果你只是想检查"="是否出现,为什么不使用String的indexOf() 方法呢?
if str.indexOf('=')  //...

9
contains 更简洁易懂,你不需要调整索引,也更容易理解。 - phihag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接