正则expression式,如何匹配多行?
我试图将From
行一直匹配到以下Subject
行的末尾:
.... From: XXXXXX Date: Tue, 8 Mar 2011 10:52:42 -0800 To: XXXXXXX Subject: XXXXXXX ....
到目前为止我有:
/From:.*Date:.*To:.*Subject/m
但是,这不符合主题行的结尾。 我尝试添加$
但没有效果。
您可以使用/m
修饰符启用多行模式(即允许匹配换行符),您可以使用?
执行非贪婪匹配:
message = <<-MSG Random Line 1 Random Line 2 From: person@example.com Date: 01-01-2011 To: friend@example.com Subject: This is the subject line Random Line 3 Random Line 4 MSG message.match(/(From:.*Subject.*?)\n/m)[1] => "From: person@example.com\nDate: 01-01-2011\nTo: friend@example.com\nSubject: This is the subject line"
请参阅http://ruby-doc.org/core/Regexp.html并search“多行模式”和“默认贪婪”。;
如果你使用ruby,你可以尝试:
Regexp.new("some reg", Regexp::MULTILINE)
如果你不使用ruby,我build议你破解这个问题:
- 用SOME_SPECIAL_TOKENreplace所有的“\ n”
- search正则expression式,并执行其他操作…
- 恢复:用“\ n”replaceSOME_SPECIAL_TOKEN
如果要在换行符之间进行匹配,则有一种可能性是先将所有换行符replace为不会出现在文本中的其他字符(或字符序列)。 例如,如果将所有文本都放在一个stringvariables中,则可以使用aString.split("\n").join("|")
来replacestring中的所有换行符。
另外,请看Alan Moore对你之前关于如何在正则expression式中匹配换行符的问题的回答 。
尝试:
/...^Subject:[^\n]*/m
使用以下数据:
From: XXXXXX Date: Tue, 8 Mar 2011 10:52:42 -0800 To: XXXXXXX Subject: XXXXXXX
下面的正则expression式将做到这一点:
From:([^\r\n]+)[\r\n]+Date:([^\r\n]+)[\r\n]+To:([^\r\n]+)[\r\n]+Subject:([^\r\n]+)[\r\n]+
但我会build议你不要尝试在1个正则expression式中执行此操作。 除非您确定FROM / DATE / TO / SUBJECT的顺序不会改变,否则请逐行插入正则expression式“^(\ w +):(。+)$”