اصلاح کننده های احتمالی فعلی PCRE در زیر ذکر شده است. نام های پرانتز به نام های داخلی PCRE برای این اصلاح کننده ها اشاره دارد. فضاها و خطوط جدید در اصلاح کننده ها نادیده گرفته می شوند ، شخصیت های دیگر باعث خطا می شوند.< Pan> اصلاح کننده های الگوی
اصلاح کننده های احتمالی فعلی PCRE در زیر ذکر شده است. نام های پرانتز به نام های داخلی PCRE برای این اصلاح کننده ها اشاره دارد. فضاها و خطوط جدید در اصلاح کننده ها نادیده گرفته می شوند ، سایر شخصیت ها باعث ایجاد خطا می شوند.اصلاح کننده های احتمالی فعلی PCRE در زیر ذکر شده است. نام های پرانتز به نام های داخلی PCRE برای این اصلاح کننده ها اشاره دارد. فضاها و خطوط جدید در اصلاح کننده ها نادیده گرفته می شوند ، شخصیت های دیگر باعث خطا می شوند.
من (PCRE_CASLESS) اگر این اصلاح کننده تنظیم شود ، حروف موجود در الگوی هر دو حروف بالا و پایین را مطابقت می دهند. M (pcre_multiline) به طور پیش فرض ، PCRE رشته موضوع را به عنوان یک "خط" از شخصیت ها (حتی اگر در واقع حاوی چندین خط جدید باشد) رفتار می کند."شروع خط" metacharacter (^) فقط در شروع رشته مطابقت دارد ، در حالی که "پایان خط" metacharacter ($) فقط در انتهای رشته مطابقت دارد ، یا قبل از خاتمه خطی (مگر اینکه اصلاح کننده D تنظیم شود.). این همان Perl است. هنگامی که این اصلاح کننده تنظیم شده است ، سازه های "شروع خط" و "پایان خط" بلافاصله یا بلافاصله قبل از هر خط جدید در رشته موضوع و همچنین در همان ابتدا و پایان مطابقت دارند. این معادل اصلاح کننده Perl /M است. اگر شخصیت " n" در یک رشته موضوع وجود نداشته باشد ، یا هیچ گونه وقایع ^ یا $ در یک الگوی وجود ندارد ، تنظیم این اصلاح کننده هیچ تاثیری ندارد. S (PCRE_DOTALL) اگر این اصلاح کننده تنظیم شده باشد ، یک Metacharacter نقطه در الگوی با تمام شخصیت ها ، از جمله خطوط جدید مطابقت دارد. بدون آن ، خطوط جدید حذف می شوند. این اصلاح کننده معادل اصلاح کننده Perl /S است. یک کلاس منفی مانند [^a] همیشه با یک شخصیت جدید ، مستقل از تنظیم این اصلاح کننده مطابقت دارد. x (pcre_extended) اگر این اصلاح کننده تنظیم شود ، شخصیت های داده های سفید در این الگوی کاملاً نادیده گرفته می شوند ، مگر اینکه در یک کلاس کاراکتر فراری یا در داخل یک کلاس کاراکتر قرار بگیرند ، و شخصیت های بین # # در خارج از کلاس شخصیت و شخصیت Newline بعدی نیز نادیده گرفته می شوند. این معادل اصلاح کننده Perl /X است و باعث می شود که تفسیر را در الگوهای پیچیده گنجانده شود. با این حال ، توجه داشته باشید که این فقط در مورد کاراکترهای داده صدق می کند. شخصیت های WhiteSpace ممکن است هرگز در یک الگوی خاص در یک الگوی ظاهر شوند ، به عنوان مثال در توالی (؟ (که یک زیربنایی مشروط را معرفی می کند. A (PCRE_ANCHORED) اگر این اصلاح کننده تنظیم شود ، الگوی مجبور می شود "لنگر" باشد ، یعنی ،محدود است که فقط در شروع رشته مورد نظر مطابقت داشته باشد ("رشته موضوع"). این اثر همچنین می تواند توسط سازه های مناسب در خود الگوی حاصل شود ، که تنها راه انجام آن در Perl است. D(PCRE_DOLLAR_ENDONLY) اگر این اصلاح کننده تنظیم شود ، یک metacharacter دلار در الگوی فقط در انتهای رشته موضوع مطابقت دارد. بدون این اصلاح کننده ، یک دلار نیز بلافاصله قبل از شخصیت نهایی مطابقت دارد (اما قبل از هر خط جدید دیگر نیست.) اگر اصلاح کننده m تنظیم شود ، این اصلاح کننده نادیده گرفته می شود.
هیچ معادلی برای این اصلاح کننده در پرل وجود ندارد. S وقتی قرار است یک الگو چندین بار استفاده شود، ارزش آن را دارد که زمان بیشتری را برای تجزیه و تحلیل آن صرف کنید تا زمان تطبیق را تسریع کنید. اگر این اصلاح کننده تنظیم شده باشد، این تحلیل اضافی انجام می شود. در حال حاضر، مطالعه یک الگو تنها برای الگوهای غیر لنگر که یک کاراکتر شروع ثابت ندارند مفید است. U ( PCRE_UNGREEDY ) این اصلاح کننده "طمع" کمیت کننده ها را معکوس می کند تا به طور پیش فرض حریص نباشند، اما اگر به دنبال آن باشد، حریص می شوند؟. با پرل سازگار نیست. همچنین می توان آن را با تنظیم اصلاح کننده (? U) در الگو یا با علامت سؤال در پشت یک کمی ساز تنظیم کرد (به عنوان مثال .*؟).
توجه داشته باشید :
معمولاً نمی توان بیش از نویسه های pcre. backtrack_limit را در حالت ungreedy مطابقت داد.
X ( PCRE_EXTRA ) این اصلاح کننده عملکرد اضافی PCRE را روشن می کند که با Perl ناسازگار است. هر گونه بک اسلش در الگویی که با حرفی همراه باشد که معنای خاصی ندارد باعث خطا می شود، بنابراین این ترکیب ها برای بسط آینده ذخیره می شوند. به طور پیش فرض، مانند Perl، یک بک اسلش و به دنبال آن حرفی بدون معنای خاص به عنوان یک حرف تحت اللفظی در نظر گرفته می شود. در حال حاضر هیچ ویژگی دیگری وجود ندارد که توسط این اصلاح کننده کنترل شود. J ( PCRE_INFO_JCHANGED ) تنظیمات داخلی (? J) گزینه PCRE_DUPNAMES محلی را تغییر می دهد. اجازه نام های تکراری برای الگوهای فرعی. از PHP 7. 2. 0 J به عنوان اصلاح کننده نیز پشتیبانی می شود. u ( PCRE_UTF8 ) این اصلاح کننده عملکرد اضافی PCRE را روشن می کند که با Perl ناسازگار است. رشته های الگو و موضوع به عنوان UTF-8 در نظر گرفته می شوند. موضوع نامعتبر باعث می شود که تابع preg_* با چیزی مطابقت نداشته باشد. یک الگوی نامعتبر باعث خطای سطح E_WARNING می شود. توالی های پنج و شش هشتگانه UTF-8 نامعتبر در نظر گرفته می شوند.
یادداشت های مشارکتی کاربر 12 یادداشت
با توجه به اعتبار یک رشته UTF-8 هنگام استفاده از اصلاح کننده الگوی /u، باید از مواردی آگاه بود.
1. اگر خود الگو دارای یک کاراکتر UTF-8 نامعتبر باشد، با یک خطا مواجه می شوید (همانطور که در اسناد بالا ذکر شد - "اعتبار الگوی UTF-8 از PHP 4. 3. 5 بررسی می شود."
2. هنگامی که رشته موضوع حاوی دنباله ها / نقاط کد UTF-8 نامعتبر است، اساساً منجر به "مرگ آرام" برای توابع preg_* می شود، جایی که هیچ چیز مطابقت ندارد اما بدون اینکه نشان دهد رشته UTF-8 نامعتبر است.
$examples = array( 'Valid ASCII' => "a" , 'Valid 2 Octet Sequence' => "xc3xb1" , 'Invalid 2 Octet Sequence' => "xc3x28" , 'Invalid Sequence Identifier' => " xa1" , 'Valid 3 Octet Sequence' => "xe2x82xa1" , 'Invalid 3 Octet Sequence (in 2nd Octet)' => "xe2x28xa1" , 'Invalid 3 Octet Sequence (in 3rd Octet)' =>3. PCRE توالی کاراکتر پنج و شش Octet UTF-8 را معتبر (هم در الگوهای و هم در رشته موضوع) می داند اما اینها در یونیکد پشتیبانی نمی شوند (به بخش 5. 9 "رمزگذاری کاراکتر" "برنامه نویسی امن برای لینوکس و یونیکس Howto" مراجعه کنید.- را می توان در http://www. tldp.org/ و مکان های دیگر یافت)
'Valid 4 Octet Sequence' => "xf0x90x8cxbc" , 'Invalid 4 Octet Sequence (in 2nd Octet)' => "xf0x28x8cxbc" , 'Invalid 4 Octet Sequence (in 3rd Octet)' => "xf0x90x28xbc" , 'Invalid 4 Octet Sequence (in 4th Octet)' => "xf0x28x8cx28" , 'Valid 5 Octet Sequence (but not Unicode!)' => "xf8xa1xa1xa1xa1" , 'Valid 6 Octet Sequence (but not Unicode!)' =>4- برای مثال الگوریتم در PHP که اعتبار یک رشته UTF-8 را آزمایش می کند (و پنج توالی اکتت را دور می کند) به آدرس: http://hsivonen. iki. fi/php-utf8/
echo "++Invalid UTF-8 in patte
" ; foreach ( $examples as $name => $str ) echo " $name
" ; preg_match ( "/" . $str . "/u" , 'Testing' );>
echo "++ preg_match() examples
" ; foreach ( $examples as $name =>اسکریپت زیر باید ایده ای راجع به آنچه کار می کند و چه چیزی نیست ، به شما ارائه دهد.
" xe2 x82 x28" ،
if ( count ( $ar ) == 0 ) echo "Matched nothing!
" ;>" xfc xa1 xa1 xa1 xa1 xa1" ،) ؛<$ar [ 0 ]>
" ;>
echo "++ preg_match_all() examples
" ; foreach ( $examples as $name =>$ str)
$num_utf8_chars = count ( $ar [ 0 ]); if ( $num_utf8_chars == 0 ) echo "Matched nothing!
" ;> else echo "Matched $num_utf8_chars character
" ;>
تجارت با گزینههای باینری...
ما را در سایت تجارت با گزینههای باینری دنبال می کنید
برچسب :
نویسنده : نازنین فراهانی
بازدید : 44
تاريخ : سه
شنبه
16 خرداد
1402 ساعت: 12:12