我正在寻找一个与任何字符串都不匹配的正则表达式。 例如:
假设我有以下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
答案 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和滥用正则表达式。如果你知道不会有匹配,那么在你的代码中说出来!您的代码将通过更易理解和更快速地运行来感谢您。