4

Java の正規表現の概念は初めてです。「money」、「more money」というフレーズに一致するが、「no money」というフレーズには一致しない正規表現を定義する方法

4

3 に答える 3

1

「no」を前に付けずに「money」を含むすべての文字列に一致させるには、否定後読みを使用します。

(?<!no )money

下記は用例です。.*文字列内の任意の場所に一致する正規表現の前後に追加したことに注意してください。

re = ".*(?<!no )money.*"
"blah blah blah money blah blah blah".matches(re)
=> true
"blah blah blah more money blah blah blah".matches(re)
=> true
"blah blah blah no money blah blah blah".matches(re)
=> false
于 2013-06-14T09:27:18.367 に答える
1

"(?<!no)( more)? money"これは正規表現で行うことができます...そして、あなたの例ではトリックを行うべきだと思います。

しかし、これはテキストを分析する良い方法ではありません:

  • 誤検知を引き起こす可能性があります。例えば

    "domino money"  -- matches
    

    および偽陰性; 例えば

    "more    money" -- doesn't match because we didn't allow for multiple spaces.
    
  • テストしている言語がより豊かになるにつれて、正規表現の組み合わせが爆発的に増加します。これにより、正規表現の読み取り/保守が難しくなり、パフォーマンスの問題が発生する可能性があります。

于 2013-06-14T09:27:19.743 に答える