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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-24 11:30:161011ブラウズ

How to Work Around Lookarounds in Go Regular Expressions?

正規表現の解析エラー: 無効な 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"
   }
}

追加メモ

  • 無効な場合にパニックが発生するため、regexp.MustCompile 関数を使用して正規表現パターンをコンパイルします。
  • 提供される回避策は、入力文字列が指定された形式に従っていることを前提としています。形式が異なる場合は、それに応じて正規表現を調整します。

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

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