この正規表現を使用して、文字列内のブロックコメント(c-style)と一致させたいと考えています。 しかし、なぜ以下のことはありませんか?Ruby Regexp文字クラスに改行がありますが、なぜ一致しませんか?
rblockcmt = Regexp.new "/\\*[.\s]*?\\*/" # match block comment
p rblockcmt=~"/* 22/Nov - add fee update */"
==> nil
この正規表現を使用して、文字列内のブロックコメント(c-style)と一致させたいと考えています。 しかし、なぜ以下のことはありませんか?Ruby Regexp文字クラスに改行がありますが、なぜ一致しませんか?
rblockcmt = Regexp.new "/\\*[.\s]*?\\*/" # match block comment
p rblockcmt=~"/* 22/Nov - add fee update */"
==> nil
あなたが遅延し、任意の文字や空白、0回以上一致する[.\s]*?
を意図することが表示されます。まず、空白は文字なので、\s
は必要ありません。これにより、表現は簡略化され[.]*?
になります。第二に、あなたの意図が任意の文字に一致する場合は、文字クラスの必要はありません、ちょうど.
を記述してください。第3に、、最も重要なのはであり、文字クラス内のピリオドは単に文字"."
です。
あなたは.*?
(または[^*]*
)が必要です。
私の意図はスペース、タブ、改行をマッチさせるために\ sを使うことです。ドット。他の文字と一致するようにしていますが、それはありません:) – suhao399
卿Swovelandが掲示するものに加えて、.
マッチ改行以外の任意の文字:
次のメタ文字も文字クラスのように振る舞う:
/./
- 改行以外の任意の文字を。
あなたが改行にマッチする.
が必要な場合は、例えば、m
フラグを指定することができます/.*?/m
オプション
正規表現の終了区切り文字パターンが一致することができる方法を制御する1つ以上の 単一文字オプションが続くことができます。
/pat/i
から
/pat/m
ケースを無視する -.
にマッチした文字として改行を扱う...
を改行ような例外/癖が.
と一致しない有する可能性があるのでいくつかの人々は、書く正規表現ごとにm
オプションを指定しています。
ありがとう、/ mオプションは私のために働く:)。最後に私は/\/\*.*?\*\//mを使う – suhao399
ここにはいくつかの先行技術があります:http://blog.ostermiller.org/find-comment – slothbear
最初の行の後に、戻り値を表示することをお勧めします。 '' = =// \/* [。 ] *?\ * \/' –