首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正则表达式,如何匹配多行?

正则表达式,如何匹配多行?
EN

Stack Overflow用户
提问于 2011-03-09 08:19:49
回答 3查看 61.5K关注 0票数 61

我尝试在下面的代码中将From行一直匹配到Subject行的末尾:

代码语言:javascript
复制
....
From: XXXXXX 
Date: Tue, 8 Mar 2011 10:52:42 -0800 
To: XXXXXXX
Subject: XXXXXXX
....

到目前为止,我有:

代码语言:javascript
复制
/From:.*Date:.*To:.*Subject/m

但这与主题行的末尾不匹配。我尝试添加$,但没有任何效果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-09 08:36:24

您可以使用/m修饰符启用多行模式(即允许.匹配换行符),也可以使用?执行非贪婪匹配:

代码语言:javascript
复制
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并搜索“多行模式”和“默认贪婪”。

票数 86
EN

Stack Overflow用户

发布于 2011-03-09 08:29:38

如果要跨换行符进行匹配,一种可能是首先将所有换行符替换为其他字符(或字符序列),否则这些字符不会出现在文本中。例如,如果将所有文本放在一个字符串变量中,则可以执行类似aString.split("\n").join("|")的操作,将字符串中的所有换行符替换为管道字符。

另外,请查看关于如何在正则表达式中匹配换行符的上一个问题的Alan Moore's answer

票数 5
EN

Stack Overflow用户

发布于 2011-03-09 08:32:48

使用以下数据:

代码语言:javascript
复制
From: XXXXXX
Date: Tue, 8 Mar 2011 10:52:42 -0800
To: XXXXXXX
Subject: XXXXXXX

下面的正则表达式将会产生魔力:

代码语言:javascript
复制
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的顺序不会改变;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5239997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档