正则表达式匹配包括新线

时间:2013-07-12 12:13:48

标签: ruby regex

我有一个正则表达式来抓取"*"

之间的所有内容
str = "Donec sed odio dui. *Nullam id dolor id nibh ultricies vehicula ut*"
str.match(/\*(.*)\*/)[1]

我希望匹配能够包含换行符。我该怎么办?

2 个答案:

答案 0 :(得分:9)

您需要使用m选项,该选项允许点匹配新行:

Donec sed odio dui. *Nullam id dolor id 
nibh ultricies vehicula ut*

正则表达式 str.match(/\*(.*)\*/m)[1]实例:http://www.rubular.com/r/11u9TreEOL

您的表达式将捕获第一个和最后一个*符号之间的文字,但如果您想捕获每组*之间的所有文字,那么您需要制作.*少贪心

str.match(/\*(.*?)\*/m)[1]实例http://www.rubular.com/r/rBLOnwy3By

或者您可以告诉它只是匹配所有非*字符,请注意不需要m选项,因为新行字符将与否定的[^*]字符匹配类:

str.match(/\*([^*]*)\*/)[1]实例http://www.rubular.com/r/dhQzZ58ZzM

答案 1 :(得分:3)

m修饰符放在正则表达式/\*(.*)\*/m之后。

顺便说一下,你的正则表达式可以改进为:

str[/(?<=\*).*(?=\*)/m]