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

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

Barbara Streisand
リリース: 2024-11-30 16:45:11
オリジナル
203 人が閲覧しました

How to Work Around Lookarounds in Go Regex?

正規表現の解析エラー: 無効な Perl 構文 (?!

Go で正規表現を使用しようとすると、エラーが発生します:

error parsing regexp: invalid or unsupported Perl syntax: (?!
ログイン後にコピー

このエラーは、特に次の場合に発生しますregex:

regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$")
ログイン後にコピー

解決策

この問題は、Perl とは異なり、Go 正規表現がルックアラウンドをサポートしていないために発生します。ルックアラウンドは、周囲のテキストを消費せずにチェックするアサーションです。

この制限を回避するには、別のアプローチを使用します:

まず、2 つの別々の通常のコンパイルをコンパイルします。式:

first := regexp.MustCompile(`^On\s(.+?)wrote:$`)
second := regexp.MustCompile(`^On.*On\s.+?wrote:`)
ログイン後にコピー

次に、次の手順を実行します。

  1. 最初に文字列と一致するかどうかを確認します。
  2. 一致する場合は、手順 3 に進みます。そうでない場合は、手順 3 に進みます。の場合、文字列はどちらの式にも一致しないため、true を返します。
  3. 2 番目が一致するかどうかを確認します。 string.
  4. 一致する場合、文字列は 2 番目の式と一致するため、false を返します。それ以外の場合は、true を返します。

または、オプションのキャプチャ グループを使用してプロセスを簡素化することもできます。 :

regex := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)
ログイン後にコピー

一致するかどうかを確認し、true を返しますif:

  • グループ 1 は On で終わります。
  • グループ 1 は存在しないか、On で終わりません。

それ以外の場合は、false を返します。 .

以上がGo 正規表現でルックアラウンドを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート