0

でこれを調べたところ、値を期待していたときにirbメタ文字\<\>が nil を返すことがわかりました。私が使用しているチートシートでは、これらのメタ文字はそれぞれ「単語の開始」と「単語の終了」と呼ばれています。しかし、それらは「単語境界」と同じように機能しませんか?

Friedl による「Mastering Regular Expression」の例にも当てはまるようです。

irb(main):001:0> "this cat is fat" =~ /\bcat\b/
=> 5
irb(main):002:0> "this cat is fat" =~ /\<cat\>/
=> nil
irb(main):003:0> "cat" =~ /\<cat\>/
=> nil
4

2 に答える 2

1

それは完全に可能です。Ruby 1.9 の時点で、Ruby は正規表現の解析を鬼車に切り替えました。1.9 より前では、\< と > が有効だった可能性があります。

ただし、これを調査したところ、正規表現言語への GNU 追加としてリストされていることがわかりました。

いくつかの異なる Ruby 実装を介した正規表現の実行をサポートするRubularでそれを試してみましたが、どのバージョンでも \< または > を動作させることができませんでした。\b は、単語の境界を指定するより標準的な方法のようです...

于 2014-02-02T03:50:46.063 に答える
0

Ruby は\b、Perl やその他の Perl 派生フレーバー (JavaScript、.NET、Python など) と同様に、常に単語の境界を使用してきました。\<とを使用するのは egrep のような GNU ツールだけ\>です。

あなたが使っているのは、AddedBytesのチート シートですか? いくつかのエラーが含まれていますが、それはそのうちの 1 つです。他の場所では<、および>メタ文字であり、それらを文字通り使用\<して一致させる必要があります。\>Catch-22はどうですか?

于 2014-02-02T04:46:06.220 に答える