正则表达式:如何查找两个字符串之间的文本

14

我有这段文本,我想捕获它

begin
text 
end

begin
text 
end

begin
text 
end

开始和结束之间的文本。

/begin.*end/

这将捕获第一个开始和最后一个结束。

2个回答

13

让它变成惰性匹配 - /begin.*?end/

顺便提一下:"lazy"(惰性)与 "non-greedy"(非贪婪)是同样可接受的术语。 例如例如例如


7
术语为“non greedy”(非贪婪模式),而非“lazy”(懒惰模式)。 - Bohemian

4
如果你的文本包含换行符(\n\r),你需要在正则表达式中添加“dotall”标志,并且使你的匹配变得勉强(即“非贪婪”)。
根据你使用的正则表达式版本:
/begin.*?end/s
(?s)begin.*?end

1
JavaScript版本中,/begin.*?end/s在regex101上无法正常工作,而Python版本可以。我尝试使用转义的\s,但没有匹配项。 - Mikel
当然,@Mike在regex 101中使用/begin.*?end/s是无效的,因为正斜杠不是正则表达式的一部分。它们是js中的分隔符,但人们经常在与js有关的正则表达式答案中包含它们,因为这是编码它们的方式(即使用正斜杠而不是引号,以及在正则表达式后面使用分隔符/分隔的标志)。这类似于在答案中使用带引号的非js版本,如"(?S)begin.*?end"(人们有时也这样做)。 - Bohemian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接