2016-12-03 2 views
0

この正規表現を使用して、文字列内のブロックコメント(c-style)と一致させたいと考えています。 しかし、なぜ以下のことはありませんか?Ruby Regexp文字クラスに改行がありますが、なぜ一致しませんか?

rblockcmt = Regexp.new "/\\*[.\s]*?\\*/" # match block comment 
p rblockcmt=~"/* 22/Nov - add fee update */" 

==> nil 
+0

ここにはいくつかの先行技術があります:http://blog.ostermiller.org/find-comment – slothbear

+1

最初の行の後に、戻り値を表示することをお勧めします。 '' = =// \/* [。 ] *?\ * \/' –

答えて

1

あなたが遅延し、任意の文字や空白、0回以上一致する[.\s]*?を意図することが表示されます。まず、空白は文字なので、\sは必要ありません。これにより、表現は簡略化され[.]*?になります。第二に、あなたの意図が任意の文字に一致する場合は、文字クラスの必要はありません、ちょうど.を記述してください。第3に、、最も重要なのはであり、文字クラス内のピリオドは単に文字"."です。

あなたは.*?(または[^*]*)が必要です。

+0

私の意図はスペース、タブ、改行をマッチさせるために\ sを使うことです。ドット。他の文字と一致するようにしていますが、それはありません:) – suhao399

3

卿Swovelandが掲示するものに加えて、.マッチ改行以外の任意の文字

次のメタ文字も文字クラスのように振る舞う:

/./ - 改行以外の任意の文字を。

https://ruby-doc.org/core-2.3.0/Regexp.html

あなたが改行にマッチする.が必要な場合は、例えば、mフラグを指定することができます/.*?/m

オプション

正規表現の終了区切り文字パターンが一致することができる方法を制御する1つ以上の 単一文字オプションが続くことができます。

/pat/iから
/pat/mケースを無視する - .
にマッチした文字として改行を扱う...

https://ruby-doc.org/core-2.3.0/Regexp.html

を改行ような例外/癖が.と一致しない有する可能性があるのでいくつかの人々は、書く正規表現ごとにmオプションを指定しています。

+0

ありがとう、/ mオプションは私のために働く:)。最後に私は/\/\*.*?\*\//mを使う – suhao399

関連する問題