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

いくつかの条件では、すべての lineInput に対して checkString が false を返すことを望みます。正規表現のみを制御するため (lineInput ではありません)、どの文字列にも一致しない値はありますか?

-- よなたん

4

3 に答える 3

2

\b\B矛盾しているため、どの文字列とも一致しません。

\b単語境界に一致するゼロ幅のアンカーです。\Bも長さがゼロで、そうで\bない場所に座っています。\bしたがって、\B一緒に目撃することはまったく不可能です。

正規表現フレーバーがルックアラウンドをサポートしている場合は、否定先読みも使用できます(?!)。空の文字列に一致する可能性があるため、このアサーションは常に失敗します。

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 に答える