ホームページ >バックエンド開発 >PHPチュートリアル >PHP のアップグレード後に「文字クラスの範囲が無効です」というメッセージが表示されて `preg_match()` が失敗するのはなぜですか?

PHP のアップグレード後に「文字クラスの範囲が無効です」というメッセージが表示されて `preg_match()` が失敗するのはなぜですか?

DDD
DDDオリジナル
2024-12-09 01:11:10622ブラウズ

Why Does `preg_match()` Fail with

preg_match(): PHP アップグレード後の文字クラスの範囲が無効です

エラー「preg_match(): コンパイルに失敗しました: 文字の範囲が無効です」 「オフセットのクラス」は通常、通常の文字クラス内でハイフン (-) が誤って使用されている場合に発生します。 expression.

提供されたコード スニペット内:

文字クラス [0-9a-z_-s] 内にハイフン「-」があります。古いバージョンの PHP では、ハイフンをバックスラッシュでエスケープするか、文字クラスの先頭または末尾にハイフンを配置すると、ハイフンを使用できました。

PHP 7.3 および PCRE2 の変更点

ただし、PHP 7.3 と PCRE2 ライブラリへの移行では、ハイフンの使用がさらに制限されています。 PCRE2 では、ハイフンは文字クラスの先頭または末尾でのみ使用できます。

この問題を解決するには、文字クラスを次のように変更します。

これにより、ハイフンが次の位置に配置されます。文字クラスの先頭を指定して、正しく使用できるようにします。

追加注

  • 提供された回答で提案されているように、ハイフンを でエスケープすることは、PHP 7.3 以降では必要ありません。
  • PCRE2 ライブラリでは、通常のライブラリに他の変更が導入される可能性があります。式の構文。 PHP 7.3 以降にアップグレードする場合は、ドキュメントを確認し、コードに必要な調整を行うことが重要です。

以上がPHP のアップグレード後に「文字クラスの範囲が無効です」というメッセージが表示されて `preg_match()` が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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