無効な正規表現解析エラー: 「正規表現解析エラー: 無効またはサポートされていない 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 サイトの他の関連記事を参照してください。