开发者

looking for the FALSE regex [duplicate]

开发者 https://www.devze.com 2023-01-10 21:58 出处:网络
This question already exists: Closed 12 years ago. Possible Duplicate: What regular expression can never match?
This question already exists: Closed 12 years ago.

Possible Duplicate:

What regular expression can never match?

I'm looking for a regular expression that will not match any string. Example:

suppose I have the following Java code

public boolean checkString(String lineInput, String regex)
{
    final Patter开发者_运维百科n p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    final Matcher m = p.matcher(lineInput);
    return m.matches();
}

In some conditions I want that checkString will return false for all all lineInput.Cause I control only regex (and not lineInput) is there a value that will NOT match any string ?

-- Yonatan


\b\B will not match any string since it's a contradiction.

\b is a zero-width anchor that matches the word boundary. \B is also zero-length, and sits wherever \b doesn't. Therefore it's simply impossible to witness \b and \B together.

If the regex flavor supports lookarounds, you can also use negative lookahead (?!). This assertion will always fail since it's always possible to match an empty string.

As Java String literals, the patterns above are "\\b\\B" and "(?!)" respectively.

References

  • regular-expressions.info/Word Boundaries, Lookarounds


You could also try these old, esoteric characters that aren't really used anymore (although technically could be matched):

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


I think the sensible way to do this would be like so:

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();
}

Creating a non-matching regex sounds like a horrible kludge and an abuse of regex. If you know there won't be a match, then say so in your code! Your code will thank you for it by being more understandable and running faster.

0

精彩评论

暂无评论...
验证码 换一张
取 消