0

每个人。

我想我在 ruby​​ 正则表达式中遗漏了一些东西。

似乎我不能使用%r/match code/s,因为 Ruby 只有/m, 不允许我搜索匹配行而忽略新行符号。

我现在需要的:

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

我需要在这里找到三场比赛

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

这可以通过使用 /s 标志来完成,但是 /s 标志用于在 Ruby 中进行编码,而 /m 标志只是给我这个与所有文本的匹配

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

当我像这样搜索表达式时%r/a.*c/m

我将不胜感激任何信息。

4

2 回答 2

5

Rubym用于启用 dotall 模式,请参阅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 回答