ruby regex dotall没有dotall / s标志

时间:2012-12-14 11:43:18

标签: ruby regex

每个人

我认为我在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

我将不胜感激任何信息。

2 个答案:

答案 0 :(得分:5)

Ruby正在使用m启用dotall模式,请参阅regular-expressions.info。因此,您的表达式正是您想要的s修饰符。

你的问题与众不同,你的正则表达式太贪婪了。所以你应该把它改成

%r/a.*?c/m

所以.*?只会匹配下一个“c”而不是最后一个。

答案 1 :(得分:2)

你需要关闭星星的贪婪,这样它才能在第一个“c”上停止

/(a.*?c)/m

在此处查看演示:http://rubular.com/r/D8RptUOsjR