1

可能重复:
什么正则表达式永远无法匹配?

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

假设我有以下 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。因为我只控制正则表达式(而不是 lineInput),是否存在不匹配任何字符串的值?

——约纳坦

4

3 回答 3

2

\b\B不会匹配任何字符串,因为它是矛盾的。

\b是与单词边界匹配的零宽度锚点。\B也是零长度的,并且坐在任何\b不存在的地方。\b因此,见证和\B在一起是根本不可能的。

如果正则表达式支持lookarounds,您也可以使用否定的lookahead (?!)。这个断言总是会失败,因为它总是可以匹配一个空字符串。

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

参考

于 2010-08-08T17:40:02.007 回答
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();
}

创建一个不匹配的正则表达式听起来像是一个可怕的组合和正则表达式的滥用。如果您知道不会有匹配项,请在您的代码中说明!您的代码将通过更易于理解和更快地运行来感谢您。

于 2010-08-08T18:09:51.510 回答
0

您还可以尝试这些不再使用的旧的、深奥的字符(尽管技术上可以匹配):

\f  The form-feed character ('\u000C')
\a  The alert (bell) character ('\u0007')
\e  The escape character ('\u001B')
于 2010-08-08T18:00:14.353 回答