繁体   English   中英

正则表达式,如何匹配多条线?

[英]Regex, how to match multiple lines?

我正在尝试将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,我建议你解决这个问题:

  1. 用SOME_SPECIAL_TOKEN替换所有“\\ n”
  2. 搜索正则表达式,并执行其他操作...
  3. 恢复:用“\\ n”替换SOME_SPECIAL_TOKEN

如果要匹配换行符,一种可能性是首先将所有换行符替换为文本中不会出现的其他字符(或字符序列)。 例如,如果您在一个字符串变量中包含所有文本,则可以执行类似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的序列不会改变;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM