【问题标题】:Using regex to match any character except =使用正则表达式匹配除 = 之外的任何字符
【发布时间】:2012-04-03 23:29:54
【问题描述】:

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

这是我写的 -

    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=" 与模式匹配。

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

【问题讨论】:

  • 你想匹配什么? (或不)?只是 [^=]* 将匹配除 '=' 字符之外的任何内容。
  • 您不能嵌套字符类。 [[] 只是一个由单个字符[ 组成的字符类。

标签: java regex


【解决方案1】:

如果唯一被禁止的字符是等号,那么[^=]* 之类的应该可以工作。

[^...] 是一个否定字符类;它匹配单个字符,该字符是方括号之间的列表中的任何字符以外的任何字符。 * 重复表达式零次或多次。

【讨论】:

  • 我怎样才能让[^=]*也匹配\n
  • 不是 Java 人,但我的第一个搜索引擎匹配是 stackoverflow.com/a/30315738/874188
  • 嗯,谢谢,但我的特殊用例是 VSCode 中的搜索和替换。
【解决方案2】:

首先,您不需要正则表达式。只需拨打contains

if(str.contains("="))
    System.out.println("does not");
else
    System.out.println("matches");

您正在寻找的正确正则表达式只是

String patternString = "[^=]*";

【讨论】:

  • 这可能对原始海报很有帮助。但是这个答案与问题的具体文本相去甚远,这导致成千上万的其他人访问此页面。这种替代方案对他们的价值要小得多。
【解决方案3】:

如果您的目标是在字符串中不包含任何 = 字符,请尝试以下操作

String patternString = "[^=]*";

【讨论】:

    【解决方案4】:

    如果您只想检查“=”的出现,为什么不使用 String indexOf() 方法?

    if str.indexOf('=')  //...
    

    【讨论】:

    • contains 更短,更容易理解,而且你不需要摆弄索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多