0

みんな。

ルビー正規表現に何かが欠けていると思います。

%r/match code/sRubyには/m改行記号を無視してマッチラインを検索することができないため、使用できないようです。

今のところ必要なもの:

line 1 : a b c
line 2 : a b
line 3 : c
line 4 : a
line 5 : b c

ここで 3 つの一致を見つける必要があります

1. a b c
2. a b (new line) c
3. a ( new line ) b c

これは /s フラグを使用して実行できますが、/s フラグは Ruby でのエンコーディングに使用され、/m フラグはすべてのテキストにこの 1 つの一致を与えるだけです。

a b c 
a b ( new line ) c
a ( new line ) b c

このような表現を検索すると%r/a.*c/m

情報をいただければ幸いです。

4

2 に答える 2

5

Ruby はmdotall モードを有効にするために使用しています。regular-expressions.infoを参照してください。したがって、式はs修飾子が必要とすることを正確に行っています。

あなたの問題は別の問題です。正規表現が一致しすぎています。したがって、次のように変更する必要があります

%r/a.*?c/m

そのため、は次の"c".*?にのみ一致し、最後には一致しません。

于 2012-12-14T11:50:36.520 に答える
2

最初の「c」で停止するように、星の貪欲さをオフにする必要があります

/(a.*?c)/m

ここでデモを参照してください: http://rubular.com/r/D8RptUOsjR

于 2012-12-14T11:50:34.523 に答える