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 に答える