Go 正規表現コードが「無効またはサポートされていない Perl 構文: (?!」) エラーをスローするのはなぜですか?

Susan Sarandon
リリース: 2024-11-09 06:16:02
オリジナル
990 人が閲覧しました

Why does my Go regex code throw an

無効な正規表現解析エラー: 「正規表現解析エラー: 無効またはサポートされていない Perl 構文: (?!」) について理解する

エラーが発生した場合「正規表現の解析エラー: 無効またはサポートされていない Perl 構文: (?!"、これは Go で使用される正規表現構文に問題があることを示しています。この特定のエラーは、Go の正規表現パッケージがサポートしていない Perl の否定先読み構文を使用するときに発生します。

あなたの場合、正規表現:

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

は、シーケンス「On. On」で始まり、その後にメッセージが続く文字列との一致を試みます。 Go は否定先読み構文 (?!、Perl 固有の機能です) を認識しません。

解決策:

この問題を解決するには、負の先読みに依存せずに一致条件を表現する別の方法の 1 つは、2 つの別個の正規表現を使用することです。式:

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

これらの正規表現を次のように使用できます:

if first.MatchString(str) && !second.MatchString(str) {
  // The string matches the desired condition
}
ログイン後にコピー

この方法では、文字列が最初の正規表現と一致するかどうか (つまり、" が含まれていないことを意味します) を判断できます。の上。 On") であり、2 番目の正規表現と一致しません ("On" が 2 回含まれていないことを意味します)。

追加オプション:

または、元の正規表現を変更できます。オプションのキャプチャ グループを含める正規表現:

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

その後、一致があるかどうかを確認し、一致する場合は true を返すことができます。グループ 1 (キャプチャされた部分文字列) は「On」で終わります。はいの場合は false を返し、それ以外の場合は true を返します。

以上がGo 正規表現コードが「無効またはサポートされていない Perl 構文: (?!」) エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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