我正在尝试将这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并搜索“多行模式”和“默认贪婪”。
如果您使用的是 ruby,您可以尝试:
Regexp.new("some reg", Regexp::MULTILINE)
如果你不使用 ruby,我建议你破解这个问题:
如果要跨换行符进行匹配,一种可能性是首先将所有换行符替换为文本中不会出现的其他字符(或字符序列)。例如,如果您将所有文本都放在一个字符串变量中,您可以执行一些操作,例如aString.split("\n").join("|")
用管道字符替换字符串中的所有换行符。
另外,请查看Alan Moore对您之前关于如何匹配正则表达式中的换行符的问题的回答。
尝试:
/...^Subject:[^\n]*/m
使用以下数据:
From: XXXXXX
Date: Tue, 8 Mar 2011 10:52:42 -0800
To: XXXXXXX
Subject: XXXXXXX
以下正则表达式将发挥作用:
From:([^\r\n]+)[\r\n]+Date:([^\r\n]+)[\r\n]+To:([^\r\n]+)[\r\n]+Subject:([^\r\n]+)[\r\n]+
但我建议您不要尝试在 1 个正则表达式中执行此操作。逐行推入正则表达式 "^(\w+):(.+)$" ,除非您确定 FROM/DATE/TO/SUBJECT 的顺序不会改变;)