PHP 正規表現のエラー - 最大バックトラッキング (pcre.backtrack_limit)/再帰制限
昨日、同僚が通常の定期収集プログラムに取り組んでいて、奇妙な現象を発見しました。何気なく書いているのですが、サーバーにアップロードしてみると、どうやって正規表現を書いても一致しないことが分かりました。長期間調整しても効果がなかったので、諦めていませんか?それから...私は負けるつもりはありませんでした...夕食後、パソコンを立ち上げて、正規表現のルールについて何気なくブログを書いたり、正規表現の書き方などについて話し続けました。ようやく落ち着いて分析してみました。
同僚と私はコンピューターに WAMP をインストールしていますが、PHP のバージョンは 5.3.x で、サーバーの PHP のバージョンは 5.2.x です。これが問題なのでしょうか? pcre 関数 - preg_match_all、いいですね。preg_last_error 関数があることがわかりました。それを開いて調べたところ、返されたエラーは PREG_BACKTRACK_LIMIT_ERROR でした。問題があるため、コードの先頭に追加しました。結果は正常にキャプチャされます。マニュアルを振り返ってみると、次のような紹介文がありました:
最後に、オンラインでいくつかの情報を確認しました。ブロガーの 1 人が非常に詳細な情報を書いていました。関連するコンテンツと説明をいくつか示します。
PHP の拡張子 pcre には 2 つの設定項目が用意されています。
1 pcre.backtrack_limit //バックトラックの最大数
2 pcre.recursion_limit //ネストの最大数
デフォルトの backtarck_limit は 100000 (100,000) です。
さて、この問題の原因を解明するには、「バックトラッキング」とは何かが鍵となります。
この正規表現は、非貪欲モードを使用します。非貪欲パターン マッチングの原理は、単純に、一致または不一致の場合に、不一致を優先して記録し、一致制御を引き継ぎます。正規表現文字の次の一致。その後の一致が失敗した場合は、戻って一致します。
例:
ソース文字列: aaab 正規: .*?
マッチング処理が開始されると、まず「.*?」がマッチング制御を取得します。これは非貪欲モードであるため、最初はマッチングせず、次にマッチングした文字「b」にマッチング制御を渡します。ソース文字列の位置 1 でエラー (「a」) が発生したため、バックトラックして一致する制御を「.*?」に戻します。この時点で、「.*?」は文字「a」に一致し、制御を に渡します。もう一度「b」、というようにして、最終的に一致する結果が得られ、このプロセスで合計 3 回のバックトラッキングが発生しました。
1. PHP 5.2 以降では、次の機能が提供されます。 int preg_last_error (void) 最後の PCRE 正規表現実行のエラー コードを返します。
この関数の戻り値がゼロでない場合は、特に記事の例ではエラー (PREG_BACKTRACK_LIMIT_ERROR) が返されたことを意味します。
2. 非貪欲モードではバックトラッキングが多すぎるため、必然的にパフォーマンスの問題が発生します。この問題は、特に大量のデータを扱うテキスト処理を行う場合に、通常のルールを適切に記述することで回避できます。慎重に設計しないと、非常に困難になります。また、パフォーマンスを考慮して、代わりに文字列処理を使用することをお勧めします。

PHP作为一种流行的Web开发语言,已经被使用了很长时间。PHP中集成的PDO(PHP数据对象)类是我们在开发Web应用程序过程中与数据库进行交互的一种常用方法。但是,一些PHP开发者经常遇到的问题是,当使用PDO类与数据库进行交互时,他们会收到这样的错误:PHPFatalerror:CalltoundefinedmethodPDO::prep

解决C++代码中出现的“error:incompletetypeisnotallowed”问题在C++的编程过程中,有时候会遇到一些编译错误,其中一个常见的错误是“error:incompletetypeisnotallowed”。这个错误通常是由于在使用不完整的类型进行操作时引起的。本文将介绍这个错误的原因,并提供几种解决方法。首先,我

在Vue应用中使用axios是十分常见的,axios是一种基于Promise的HTTP客户端,可以用于浏览器和Node.js。在开发过程中,有时会出现“Uncaught(inpromise)Error:Requestfailedwithstatuscode500”的错误提示,对于开发者来说,这个错误提示可能有些难以理解和解决。本文将会探讨这

“0271:real time clock error”开不开机的解决办法:1、按一下F1,在出现的界面中,将选项栏转到第三项“Date/Time”;2、将系统时间手动修改成现在的时间;3、按F10,在弹出的对话框中,选择yes;4、重新打开笔记本即可正常开机。

解决C++代码中出现的“error:expectedinitializerbefore'datatype'”问题在C++编程中,有时候我们在编写代码时会遇到一些编译错误,其中一种常见的错误是“error:expectedinitializerbefore'datatype'”。这个错误通常在变量声明或函数定义中发生,可能导致程序无法正确编译或

如何解决PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory在使用PHP开发过程中,我们经常会遇到一些文件操作的问题,其中之一就是"PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory

在使用PHP编写Web应用程序时,经常会使用MySQL数据库来存储数据。PHP提供了一种与MySQL数据库进行交互的方法,称为MySQLi。然而,有时在使用MySQLi时,会遇到一个错误信息,如以下所示:PHPFatalerror:Calltoundefinedfunctionmysqli_connect()这个错误信息意味着PHP无法找到my

《Laravel中take和limit的使用方法详解》在Laravel中,take和limit是两个常用的方法,用于在数据库查询中限制返回的记录数。虽然它们的作用类似,但在具体的使用场景中有一些细微的区别。本文将详细解析这两个方法的用法,并提供具体的代码示例。一、take方法在Laravel中,take方法用于限制返回的记录数,通常结合orderBy方法一起


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
