5

後ろ姿を貪欲にする方法は?
この場合、ルックビハインドが:ifが存在する場合にそれを消費するようにします。

m = Regex.Match("From: John", @"(?i)(?<=from:)....");
// returns ' Jon' what I expect not a problem just an example

m = Regex.Match("From: John", @"(?i)(?<=from:?)....");
// returns ': Jo'
// I want it to return ' Jon'

回避策を見つけました

@"(?i)(?<=\bsubject:?\s+).*?(?=\s*\r?$)"

?の後に肯定的なものを置く限り 次に、オプションの貪欲なものを場から外します。同じ理由で、私は$を楽しみにしていなければなりませんでした。
しかし、あなたがオプションの貪欲で終わる必要があるならば、それから以下の受け入れられた答えで行かなければなりません。

4

1 に答える 1

4

興味深いことに、私はそれらが.NETで貪欲ではないことに気づいていませんでした。これが1つの解決策です:

(?<=from(:|(?!:)))

これの意味は:

(
  :     # match a ':'
  |
  (?!:) # otherwise match nothing (only if the next character isn't a ':')
) 

これにより、存在する場合は「:」と一致するように強制されます。

于 2012-09-04T23:17:05.017 に答える