寻找FALSE正则表达式

时间:2010-08-08 17:37:09

标签: java regex regex-negation

  

可能重复:
  What regular expression can never match?

我正在寻找一个与任何字符串都不匹配的正则表达式。 例如:

假设我有以下Java代码

public boolean checkString(String lineInput, String regex)
{
    final Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    final Matcher m = p.matcher(lineInput);
    return m.matches();
}

在某些情况下,我希望checkString将为所有lineInput返回false。因为我只控制regex(而不是lineInput)是否有一个不匹配任何字符串的值?

- Yonatan

3 个答案:

答案 0 :(得分:2)

\b\B将不匹配任何字符串,因为它是一个矛盾。

\b是一个与单词边界匹配的零宽度锚点。 \B也是零长度,并且位于\b没有的地方。因此,根本无法见到\b\B

如果正则表达式支持外观,您还可以使用否定前瞻(?!)。此断言将始终失败,因为始终可以匹配空字符串。

作为Java String文字,上面的模式分别是"\\b\\B""(?!)"

参考

答案 1 :(得分:0)

您还可以尝试这些旧的,深奥的字符,这些字符已经不再使用了(虽然在技术上可以匹配):

\f  The form-feed character ('\u000C')
\a  The alert (bell) character ('\u0007')
\e  The escape character ('\u001B')

答案 2 :(得分:0)

我认为这样做的明智之举就是这样:

private boolean noMatch = false;

public void setNoMatch(boolean nm) { noMatch = nm; }

public boolean checkString(String lineInput, String regex)
{
    if (noMatch) return false;
    final Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    final Matcher m = p.matcher(lineInput);
    return m.matches();
}

创建一个不匹配的正则表达式听起来像一个可怕的kludge和滥用正则表达式。如果你知道不会有匹配,那么在你的代码中说出来!您的代码将通过更易理解和更快速地运行来感谢您。