3

最近の dzone パズラーを実行して、文字列を繰り返し数字と一致させていますが、次のことで混乱しています。

次のパターンが機能することを期待します: /(\d)\1/

演算子 =~ (マッチャーを作成することになっている) を使用すると、これは正しく一致します

if(!("${num}" =~ /(\d)\1/) )
            println num

印刷されません。たとえば、77、100、222 などです。

しかし、==~(ブール値に評価されるはず)を使用すると、つまり:

if(!("${num}" ==~ /(\d)\1/) )
            println num

次に、55、66 は出力されませんが、100、111 は出力されます。動作させるには、パターンを /\d*(\d)\d\d*/ に変更する必要があります。

私は何を誤解していますか?パターンが =~ では機能するのに ==~ では機能しないのはなぜですか?

任意の洞察をいただければ幸いです。

4

1 に答える 1

3
=~ creates a matcher
==~ (returns boolean, whether String matches the pattern)

// =~ creates a Matcher, and in a boolean context, it's "true" if it has at least one   
//match, "false" otherwise.
assert "cheesecheese" =~ "cheese"

// ==~ tests, if String matches the pattern
assert "2009" ==~ /\d+/  // returns TRUE

ドキュメンテーション

于 2013-10-03T09:25:18.800 に答える