【发布时间】:2013-12-11 16:18:17
【问题描述】:
我想匹配介于 BEGIN 和 END 之间的任何内容,包括空格和换行符。
I.E.我有以下文字:
BEGIN END BEGIN a END
我想编写一个正则表达式,它会返回两个匹配项:'' 和 'a'。目前我有这个:
/\s*BEGIN\s*\n(.*?)\n\s*END\s*\n/sg
但是,这个只给出一个匹配:
END
BEGIN
a
您知道问题出在哪里:第一个 BEGIN 与第二个 END 配对。我希望它与第一个 END 配对。好像
.*?
不匹配空字符串 - 即它贪婪匹配。
【问题讨论】:
-
我不了解 Perl,但我在 C# 中尝试过,它成功了。
-
.*?确实匹配空字符串:perl -We '$_ = ""; print "match" if /.*?/;' -
我得到的结果和你一样。
.*?确实匹配 "" 但显然仍然很贪婪。 -
.*?并不贪心,但\s*是。 -
perl non-greedy problem 的可能重复项