Go Regex が「無効またはサポートされていない Perl 構文: (?!」エラーをスローする理由とその回避方法?

Mary-Kate Olsen
リリース: 2024-11-16 17:52:03
オリジナル
841 人が閲覧しました

Why Does Go Regex Throw a

Go 正規表現解析エラー: (?!

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

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

このエラーは、Go 正規表現エンジンが Perl 固有の構文であるルックアラウンドをサポートしていないことが原因で発生します。ルックアラウンドは、現在の位置の周囲に特定のパターンが存在するかどうかを確認する正規表現パターンであり、特定の複雑なテキスト マッチング タスク。

回避策

Go はネイティブでルックアラウンドをサポートしていないため、回避策としては、指定されたパターンの有無を手動で確認する必要があります。 regex:

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

次のアプローチを使用できます:

  • 2 つの別々の正規表現パターンを使用して、目的の正規表現の存在 (2 番目のパターン) と不在 (1 番目のパターン) を確認します。 pattern.
  • パターンをコンパイルします:
absencePattern := regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$")
presencePattern := regexp.MustCompile("^(On.*On\s.+?wrote:$")
ログイン後にコピー
  • 入力文字列のチェックを実行します:
if absencePattern.MatchString(input) && !presencePattern.MatchString(input) {
  // The pattern is absent
} else {
  // The pattern is present
}
ログイン後にコピー

追加オプション

または、オプションのキャプチャ グループを使用して同じ結果を達成することもできます。

pattern := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)
if match := pattern.FindStringSubmatch(input); match != nil { // match is nil if no match found
  if match[1] != "" { // Group 1 ends with "On"
    return false
  }
  return true
}
ログイン後にコピー

このアプローチでは、別個の正規表現パターンが不要になり、コードを簡素化しながらコードを簡素化できます。必要な機能。

以上がGo Regex が「無効またはサポートされていない Perl 構文: (?!」エラーをスローする理由とその回避方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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