Go で正規表現をコンパイルしようとすると、次の解析エラーが発生する可能性があります:
error parsing regexp: invalid or unsupported Perl syntax: (?!
このエラーは通常、ルックアラウンド演算子 (?!... ではありません) を使用しようとすると発生します。 Go の正規表現構文でサポートされています。
ルックアラウンドは、別の特定のパターンが直後または前にない場合にのみ、パターンを照合するために使用される特殊なタイプの正規表現演算子です。この場合、(?! は、指定された文字列がテキスト "On" で始まっていないかどうかをチェックするために使用されます。
Go はルックアラウンドをサポートしていないため、いくつかの回避策があります。
個別の正規表現を使用する
1 つの方法は、2 つの個別の正規表現を使用することです。 :
nonOnRegex := regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$") onOnRegex := regexp.MustCompile("^On.*On\s.+?wrote:")
その後、nonOnRegex が文字列と一致するかどうかを確認できます。 onOnRegex が一致しませんので、目的の結果を決定できません。
オプションのキャプチャ グループの使用
別の回避策は、オプションのキャプチャ グループを使用することです:
regex := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)
この正規表現を使用して文字列を照合した後、最初のキャプチャ グループが存在し、「On」で終わるかどうかを確認できます。存在する場合は false を返し、それ以外の場合は true を返します。
これらの回避策のいずれかを実装すると、Go の正規表現構文でルックアラウンドの機能を効果的に複製できます。
以上がGo の正規表現でルックアラウンドを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。