正規表現の解析エラー: 無効な Perl 構文 - 問題の理解と回避策の見つけ方
正規表現 "^(? !On.*On\s. ?write:)(On\s(. ?)wrote:)$" (Go では一般的)発生したエラーは次のとおりです:
error parsing regexp: invalid or unsupported Perl syntax: (?!
このエラーは、Go がルックアラウンドをサポートしていないという事実に起因します。ルックアラウンドは、(?!.
のような否定的な先読みを可能にする Perl 正規表現で使用できる構文機能です) ルックアラウンド構文を理解する
正規表現では、ルックアラウンドはメタキャラクターです。入力文字列の文字を消費せずに条件をアサートします。(?! で示される) は、次の式が現在の位置で一致しないことをアサートします。
Go Regex Workaround
Go はルックアラウンドをサポートしていないため、上記の正規表現を直接使用することはできません。代わりに、複数の正規表現と条件チェックを使用する回避策があります。必須:
r1 := regexp.MustCompile(`^On\s(.+?)wrote:$`) r2 := regexp.MustCompile(`^On.*On\s.+?wrote:`) match1 := r1.MatchString(inputString) match2 := r2.MatchString(inputString) if match1 && !match2 { // The string does not contain "On ... On" but contains "On ..." // Handle match }
または、オプションのキャプチャ グループを使用して、一致が成功した後にグループの内容を確認することもできます:
r := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`) match := r.FindStringSubmatch(inputString) if match != nil { // Handle match if match[1] != "" { // Group 1 ends with "On" } }
追加メモ
以上がGo の正規表現でルックアラウンドを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。