ホームページ  >  記事  >  バックエンド開発  >  Go の正規表現でルックアラウンドを回避するにはどうすればよいですか?

Go の正規表現でルックアラウンドを回避するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-12 19:47:021028ブラウズ

How to Workaround Lookarounds in Go Regular Expressions?

正規表現の解析エラー: 無効またはサポートされていない Perl 構文 (?!

Go で正規表現をコンパイルしようとすると、次の解析エラーが発生する可能性があります:

error parsing regexp: invalid or unsupported Perl syntax: (?!

このエラーは通常、ルックアラウンド演算子 (?!... ではありません) を使用しようとすると発生します。 Go の正規表現構文でサポートされています。

ルックアラウンドについて

ルックアラウンドは、別の特定のパターンが直後または前にない場合にのみ、パターンを照合するために使用される特殊なタイプの正規表現演算子です。この場合、(?! は、指定された文字列がテキスト "On" で始まっていないかどうかをチェックするために使用されます。

Go Regexp回避策

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。