2

我正在尝试使用正则表达式解析电子邮件回复。我的回复看起来像:

This is my response.
Some text here

?



?



From: Lastname, Firstname

Sent: Saturday, January 05, 2013 7:37 PM

To: Lastname, Firstname

Subject: Some Subject



?



Some Text

我有兴趣将所有内容解析到第一个?我尝试过将单行模式与$response =~ /^(.*)\?\n/s;. 但这会让我回到最后?任何帮助,将不胜感激。

4

4 回答 4

8

.*是贪婪的。非贪婪版本.*?应该可以工作。

于 2013-01-06T22:31:32.507 回答
4

到目前为止,最有效的方法是使用否定字符类:

 while ($response =~ / ( [^?]* \? ) /xg) { ... }
于 2013-01-06T22:34:30.337 回答
1

您需要非贪婪模式.*

$response =~ /^(.*?)\?\n/s
于 2013-01-06T22:32:10.977 回答
0

用不贪婪的表情来做这件事是不必要的。?您可以将所有文本与以via开头的第一行匹配

/^((?:(?!^\?).)*)/sm

如果你只想匹配第一个?做它

/^([^?]*(?=\?))/s
于 2013-01-06T22:38:13.133 回答