نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

Php preg match numbers. PHP (عبارت منظم) - چیست؟ نمونه ها و تست عبارات منظم

هنگام کار با متون در هر زبان برنامه نویسی مدرن، توسعه دهندگان دائماً با وظایف بررسی داده های وارد شده برای مطابقت با الگوی مورد نظر، جستجو و جایگزینی قطعات آزمایشی و سایر عملیات معمولی برای پردازش اطلاعات نمادین روبرو هستند. توسعه الگوریتم های تأیید خود منجر به از دست دادن زمان، ناسازگاری کد برنامه و پیچیدگی در توسعه و نوسازی آن می شود.

توسعه سریع اینترنت و زبان های توسعه وب مستلزم ایجاد ابزارهای جهانی و فشرده برای پردازش اطلاعات متنی با حداقل مقدار کد مورد نیاز برای این کار است. زبان PHP که در میان مبتدیان و توسعه دهندگان حرفه ای محبوب است، از این قاعده مستثنی نیست. بیان منظم به عنوان یک زبان الگوی متن به شما امکان می دهد وظایف پردازش متن را ساده کنید و کد برنامه را ده ها و صدها خط کاهش دهید. بسیاری از مشکلات بدون آن حل نمی شود.

عبارات منظم در PHP

زبان PHP شامل سه مکانیسم برای کار با عبارات منظم است - "ereg"، "mb_ereg" و "preg". متداول ترین رابط "preg" است که توابع آن دسترسی به کتابخانه بیان منظم PCRE را فراهم می کند، که در ابتدا برای زبان Perl توسعه یافته بود، که با PHP ارائه شده است. توابع Preg یک رشته متن داده شده را برای مطابقت بر اساس یک الگوی خاص در زبان عبارت منظم جستجو می کنند.

مبانی نحو

در یک مقاله کوتاه نمی توان کل نحو عبارات منظم را با جزئیات توصیف کرد؛ ادبیات خاصی برای این کار وجود دارد. ما فقط عناصر اصلی را برای نشان دادن امکانات گسترده برای توسعه دهنده و درک نمونه های کد ارائه می کنیم.

B به طور رسمی به روشی بسیار پیچیده تعریف شده است، بنابراین بیایید توضیحات را ساده کنیم. یک عبارت منظم یک رشته متنی است. این شامل یک الگوی محدود و یک اصلاح کننده است که نحوه پردازش آن را نشان می دهد. امکان گنجاندن جایگزین ها و تکرارهای مختلف در قالب ها وجود دارد.

مثلاً در بیان /\d(3)-\d(2)-\d(2)/mجدا کننده خواهد بود «/» ، سپس الگو و نماد می آید "م"یک اصلاح کننده خواهد بود.

تمام قدرت عبارات منظم با استفاده از متاکراکترها کدگذاری می شود. متاکاراکتر اصلی زبان، بک اسلش - "\" است. نوع شخصیتی را که از آن پیروی می کند معکوس می کند (یعنی یک کاراکتر معمولی تبدیل به متاکاراکتر می شود و بالعکس). یکی دیگر از متاکاراکترهای مهم اسلش "|" است که تغییرات جایگزین الگو را مشخص می کند. نمونه های بیشتری از متاکاراکترها:

PHP، هنگام پردازش عبارات منظم، فضا را به عنوان یک کاراکتر مهم جداگانه در نظر می گیرد، بنابراین عبارات ABCWHERE و ABCWHERE متفاوت هستند.

الگوهای فرعی

در PHP، الگوهای فرعی معمولی با پرانتز از هم جدا می شوند و گاهی اوقات به آنها "زیر بیان" می گویند. توابع زیر را انجام دهید:

    برجسته کردن گزینه های جایگزین. مثلا قالب گرما (چیزی|پرنده|)با کلمات مطابقت دارد "گرما"، "پرنده آتشین"و "کباب". و بدون پرانتز فقط یک رشته خالی، "پرنده" و "کباب" خواهد بود.

    الگوی فرعی "هیجان انگیز".این بدان معنی است که اگر یک رشته فرعی در الگو مطابقت داشته باشد، تمام موارد مطابق به عنوان نتیجه برگردانده می شوند. برای وضوح، بیایید مثالی بزنیم. با توجه به عبارت منظم زیر: برنده دریافت می کند ((طلا|طلا)(مدال|کاپ)) -و یک خط برای یافتن مطابقت: "برنده مدال طلا دریافت می کند". علاوه بر عبارت اصلی، نتیجه جستجو باز خواهد گشت: "مدال طلا", "مدال"، "طلا".

عملگرهای تکرار (quadrifiers)

هنگام نوشتن عبارات منظم، اغلب لازم است که تکرار اعداد و نمادها را تجزیه و تحلیل کنید. اگر تکرارها زیاد نباشد این مشکلی نیست. اما وقتی تعداد دقیق آنها را نمی دانیم چه کنیم؟ در این صورت باید از متاکاراکترهای خاص استفاده کنید.

برای توصیف تکرارها، از quadrifiers استفاده می شود - متاس نمادها برای تعیین کمیت. چهارگوش ها دو نوع هستند:

  • عمومی، محصور در پرانتز؛
  • به اختصار

کمیت کننده عمومی حداقل و حداکثر تعداد تکرار مجاز یک عنصر را مشخص می کند که به صورت دو عدد در پرانتزهای فرفری بیان می شود، مانند x(2،5). اگر حداکثر تعداد تکرار ناشناخته باشد، آرگومان دوم حذف می شود: x(2,).

کمیت‌سازها نمادهایی را برای رایج‌ترین تکرارها نشان می‌دهند تا از درهم‌رفتگی نحوی غیرضروری جلوگیری شود. معمولاً از سه علامت اختصاری استفاده می شود:

1. * - صفر یا بیشتر تکرار، که معادل (0،) است.

2. + - یک یا چند تکرار، به عنوان مثال،).

3.؟ - صفر یا فقط یک تکرار - (0،1).

مثال های بیان منظم

برای کسانی که عبارات منظم را یاد می گیرند، مثال ها بهترین آموزش هستند. ما تعدادی را ارائه خواهیم داد که با حداقل تلاش توانایی های گسترده خود را نشان می دهند. همه کدهای برنامه کاملاً با نسخه های PHP 4.x و بالاتر سازگار هستند. برای درک کامل نحو و استفاده از تمام ویژگی‌های زبان، کتاب جی فریدل با عنوان «قاعده عبارات» را توصیه می‌کنیم که به طور کامل در مورد نحو بحث می‌کند و شامل نمونه‌هایی از عبارات منظم نه تنها در PHP، بلکه برای Python، Perl، MySQL، جاوا، روبی و سی شارپ.

بررسی صحت آدرس ایمیل

وظیفه.یک صفحه اینترنتی وجود دارد که از بازدیدکننده آدرس ایمیل می خواهد. عبارت منظم باید قبل از ارسال پیام، درستی آدرس دریافتی را بررسی کند. چک تضمین نمی کند که صندوق پستی مشخص شده واقعا وجود دارد و نامه ها را می پذیرد. اما می تواند آدرس های آشکارا نادرست را از بین ببرد.

راه حل.مانند هر زبان برنامه‌نویسی، عبارات منظم تأیید آدرس ایمیل PHP را می‌توان به روش‌های مختلفی پیاده‌سازی کرد، و مثال‌های موجود در این مقاله همه چیز نیستند. بنابراین، در هر مورد، ما لیستی از الزاماتی را ارائه خواهیم کرد که باید در هنگام برنامه نویسی در نظر گرفته شوند و اجرای خاص کاملاً به توسعه دهنده بستگی دارد.

بنابراین، عبارتی که معتبر بودن ایمیل را بررسی می کند باید شرایط زیر را بررسی کند:

  1. وجود علامت @ در رشته منبع و عدم وجود فاصله.
  2. بخش دامنه آدرس و به دنبال آن علامت @ فقط شامل کاراکترهای معتبر برای نام دامنه است. همین امر در مورد نام کاربری نیز صدق می کند.
  3. هنگام بررسی یک نام کاربری، باید به دنبال کاراکترهای خاصی مانند آپوستروف باشید یا این کاراکترها بالقوه خطرناک هستند و می توانند در حملاتی مانند تزریق SQL استفاده شوند. از چنین آدرس هایی خودداری کنید.
  4. نام کاربری فقط یک نقطه را مجاز می‌کند که نمی‌تواند اولین یا آخرین نویسه در خط باشد.
  5. نام دامنه باید شامل حداقل دو و حداکثر شش کاراکتر باشد.

نمونه ای که تمام این شرایط را در نظر می گیرد در شکل زیر قابل مشاهده است.

بررسی اعتبار URL ها

وظیفه.بررسی کنید که آیا یک رشته متن داده شده معتبر است یا نه یک بار دیگر، بررسی URL عبارات منظم را می توان به روش های مختلفی پیاده سازی کرد.

راه حل.نسخه نهایی ما به این صورت است:

/^(https?:\/\/)?([\da-z\.-]+)\.((2,6))([\/\w \.-]*)*\/?$ /

حالا با استفاده از شکل به اجزای آن با جزئیات بیشتری نگاه می کنیم.

بررسی شماره کارت اعتباری

وظیفه.بررسی صحت شماره کارت پلاستیکی وارد شده برای رایج ترین سیستم های پرداخت ضروری است. گزینه فقط برای کارت در نظر گرفته شده است

راه حل.هنگام ایجاد یک عبارت، باید وجود فاصله های احتمالی در عدد وارد شده را در نظر بگیرید. اعداد روی کارت به گروه‌هایی تقسیم می‌شوند تا خواندن و دیکته آسان‌تر شود. بنابراین، کاملاً طبیعی است که شخصی سعی کند شماره را به این روش (یعنی با استفاده از فاصله) وارد کند.

نوشتن یک عبارت جهانی که فاصله ها و خط تیره های احتمالی را در نظر بگیرد، دشوارتر از کنار گذاشتن همه کاراکترها به جز اعداد است. بنابراین توصیه می شود از متاکاراکتر /D در عبارت استفاده کنید که همه کاراکترها به جز اعداد را حذف می کند.

اکنون می توانید مستقیماً به بررسی شماره ادامه دهید. همه شرکت های کارت اعتباری از قالب شماره منحصر به فرد استفاده می کنند. مثال از این استفاده می کند و مشتری نیازی به وارد کردن نام شرکت ندارد - با شماره تعیین می شود. ویزا کارت ها همیشه با 4 شروع می شوند و دارای طول اعداد 13 یا 16 رقمی هستند. MasterCard در محدوده 51-55 با طول عدد 16 شروع می شود. در نتیجه، عبارت زیر را دریافت می کنیم:

قبل از پردازش سفارش، می توانید آخرین رقم شماره را که با استفاده از الگوریتم Luhn محاسبه می شود، بررسی کنید.

بررسی شماره تلفن

وظیفه.بررسی صحت شماره تلفن وارد شده

راه حل.تعداد ارقام در شماره تلفن ثابت و تلفن همراه از کشوری به کشور دیگر به طور قابل توجهی متفاوت است، بنابراین نمی توان به طور کلی با استفاده از عبارات منظم صحت یک شماره تلفن را بررسی کرد. اما اعداد بین المللی فرمت دقیقی دارند و برای بررسی قالب عالی هستند. علاوه بر این، اپراتورهای تلفن ملی بیشتر و بیشتر در تلاش هستند تا از یک استاندارد واحد پیروی کنند. ساختار شماره به شرح زیر است:

+CCC.NNNNNNNNXEEEE،جایی که:

C کد کشور است که از 1 تا 3 رقم تشکیل شده است.

N - تعداد تا 14 رقم.

E - پسوند اختیاری.

به علاوه یک عنصر ضروری است و علامت x تنها زمانی وجود دارد که بسط ضروری باشد.

در نتیجه عبارت زیر را داریم:

^\+(1,3)\.(4,14)(?:x.+)?$

اعداد در محدوده

وظیفه.شما باید یک عدد صحیح را در محدوده خاصی مطابقت دهید. علاوه بر این، لازم است که عبارات منظم فقط با اعداد از محدوده ای از مقادیر مطابقت داشته باشند.

راه حل. در اینجا چند عبارت برای چند مورد از رایج ترین موارد وجود دارد:

پیدا کردن آدرس IP

وظیفه.شما باید تعیین کنید که آیا رشته داده شده یک آدرس IP معتبر در قالب IPv4 در محدوده 000.000.000.000-255.255.255.255 است یا خیر.

راه حل.مانند هر کار دیگری در PHP، عبارات منظم دارای تغییرات زیادی هستند. به عنوان مثال، این:

بررسی بیان آنلاین

آزمایش عبارات منظم برای درستی می تواند برای برنامه نویسان جدید به دلیل پیچیدگی نحو، که با زبان های برنامه نویسی "عادی" متفاوت است، دشوار باشد. برای حل این مشکل، تست‌کننده‌های بیان آنلاین زیادی وجود دارند که بررسی درستی الگوی ایجاد شده روی متن واقعی را آسان می‌کنند. برنامه نویس عبارت و داده های مورد آزمایش را وارد می کند و فوراً نتیجه پردازش را می بیند. معمولاً یک بخش مرجع نیز وجود دارد که در آن عبارات منظم، مثال‌ها و تفاوت‌های پیاده‌سازی برای رایج‌ترین زبان‌های برنامه‌نویسی به تفصیل توضیح داده می‌شوند.

اما اعتماد کامل به نتایج خدمات آنلاین برای همه توسعه دهندگانی که از PHP استفاده می کنند توصیه نمی شود. یک عبارت منظم که شخصاً نوشته و آزمایش شده است، مهارت شما را بهبود می بخشد و عدم وجود خطا را تضمین می کند.

رایج ترین استفاده از عبارات منظم در پرل در جستجو و جایگزینی عملگرهایی مانند s//, متر/، اپراتورهای اتصال =~ یا != و غیره. به عنوان یک قاعده، همه این اپراتورها گزینه های مشابهی دارند مانند:

به طور معمول همه این گزینه ها با "/x" نشان داده می شوند. آنها حتی می توانند در داخل قالب ها با استفاده از ساختار جدید استفاده شوند (؟...)

عبارات یا الگوهای منظم مانند رویه‌های regexp در یونیکس هستند. عبارات و نحو از رویه های V8 آزادانه توسط هنری اسپنسر وام گرفته شده است، جایی که به تفصیل توضیح داده شده است.

الگوها از متاکاراکترهای زیر استفاده می‌کنند (کاراکترهایی که گروه‌هایی از شخصیت‌های دیگر را نشان می‌دهند) که معمولاً استاندارد egrep نامیده می‌شوند:

متاکاراکترها اصلاح کننده هایی دارند (که بعد از متاکاراکتر نوشته می شود):

در تمام موارد دیگر، بریس های فرفری شخصیت های معمولی (معمولی) در نظر گرفته می شوند. بنابراین "*" معادل (0،) است، "+" (1،) و "?" - (0.1). n و m نمی توانند بزرگتر از 65536 باشند.

به طور پیش فرض، متاکاراکترها حریص هستند. مسابقه تا آنجا که ممکن است، بدون در نظر گرفتن تأثیر متاکاراکترهای بعدی، منتشر می شود. اگر می خواهید "اشتهای آنها را کم کنید"، از علامت "؟" استفاده کنید. این معنی متا کاراکترها را تغییر نمی دهد، فقط انتشار را کاهش می دهد. بدین ترتیب:

کاراکترهای عام مانند گیومه های دوتایی کار می کنند، بنابراین می توانید از کاراکترهای "\" - (کاراکترهای اسلش معکوس) در آنها استفاده کنید:

\ t - کاراکتر برگه
\n - خط جدید
\r - بازگشت کالسکه
- ترجمه قالب
\ v - جدول بندی عمودی
- زنگ زدن
\e - در رفتن
\033 - نماد هشتی
\x1A - هگزادسیمال
\c[ - نماد کنترل
\l - کاراکتر بعدی با حروف کوچک
\u - بزرگ -//-
\ L - همه کاراکترها تا \E کوچک هستند
\U - در بالا -//-
\E - ثبت محدود کننده تغییر
\ Q - کنش را به عنوان متاکاراکتر لغو کنید

علاوه بر این، متاکاراکترهای زیر به Perl اضافه شده اند:

توجه داشته باشید که این همه شخصیت "یک" است. از اصلاح کننده ها برای نشان دادن توالی استفاده کنید. بنابراین:

علاوه بر این، فراکاراکترهای خیالی نیز وجود دارند. نشان دادن نمادهای غیر موجود در مکانی که مقدار تغییر می کند. مانند:

مرز کلمه (\b) یک نقطه خیالی بین کاراکترهای \w و \W است. در یک کلاس کاراکتر، "\b" نشان دهنده کاراکتر backspace است. متا شخصیت ها و \Z- شبیه "^" و "$" هستند، اما اگر ابتدای خط "^" و انتهای خط "$" برای هر خط در یک رشته چند خطی عمل کنند، پس و \Zابتدا و انتهای یک رشته چند خطی کامل را نشان می دهد.

اگر از گروه بندی (پرانتز) در الگو استفاده شود، شماره زیر رشته گروه به عنوان "\ رقم" تعیین می شود. توجه داشته باشید که به دنبال یک الگو در یک عبارت یا بلوک، این گروه ها به عنوان "$digit" نشان داده می شوند. علاوه بر این، متغیرهای اضافی نیز وجود دارد:

مثال:

$s = "یک 1 دو 2 و سه 3"; if ($s =~ /(\d+)\D+(\d+)/) ( چاپ "$1\n"؛ # نتیجه "1" چاپ "$2\n"؛ # "2" چاپ "$+\n" ؛ # "2" چاپ "$&\n"؛ # "1 دو 2" چاپ "$`\n"؛ # "یک" چاپ "$"\n"؛ # " و سه 3" )

نسخه 5 پرل شامل ساختارهای قالب اضافی است:

مثال:

$s = "1+2-3*4"؛ if ($s =~ /(\d)(?=-)/) # عددی را که با "-" دنبال می شود را بیابید ( چاپ "$1\n"؛ # نتیجه "2" ) else ( چاپ "خطای جستجو\n" ;)

(؟!الگو) - "نگاه کردن" به جلو با نفی:

مثال:

$s = "1+2-3*4"؛ if ($s =~ /(\d)(?!\+)/) # رقمی را بیابید که "+" به دنبال آن نباشد ( چاپ "$1\n"؛ # نتیجه "2" ) else (چاپ "جستجو" خطا\ n"؛)

(?ismx) - اصلاح کننده های "داخلی". استفاده از آن در قالب ها راحت است، به عنوان مثال، شما باید یک اصلاح کننده را در داخل قالب مشخص کنید.

قوانین بیان منظم (رجیکس)

  1. هر شخصیتی خودش را نشان می دهد مگر اینکه یک متاکاراکتر باشد. اگر می خواهید جلوه یک متاکاراکتر را لغو کنید، "\" را جلوی آن قرار دهید.
  2. رشته کاراکتر نشان دهنده رشته ای از این کاراکترها است.
  3. مجموعه کاراکترهای ممکن (کلاس) در براکت های مربع قرار می گیرد ""، به این معنی که یکی از کاراکترهای مشخص شده در پرانتز می تواند در این مکان ظاهر شود. اگر اولین کاراکتر داخل پرانتز "^" باشد، هیچ یک از کاراکترهای مشخص شده نمی تواند در این نقطه از عبارت ظاهر شود. در یک کلاس، می توانید از نماد "-" برای نشان دادن محدوده ای از کاراکترها استفاده کنید. مثلا a-z یکی از حروف کوچک الفبای لاتین است، 0-9 یک عدد و غیره است.
  4. انجمن پورتال PHP. S.U.

عبارات منظم یک ابزار پردازش رشته بسیار قدرتمند، اما در عین حال دشوار است. نکات اصلی را شرح خواهم داد. یک عبارت منظم یک الگوی رشته ای است. با استفاده از این الگو، می‌توانید به جستجوی رخدادها، جایگزینی و بررسی مطابقت با الگو بپردازید.

قوانین ایجاد یک الگو

مرزهای الگو باید با نمادهای خاصی مشخص شوند، اغلب با استفاده از " / "، اما من ترجیح می دهم استفاده کنم" # "چون فراوانی اسلش های رو به جلو و عقب می تواند چشمان شما را خیره کند و علائم هش معمولاً در هیچ جای دیگری استفاده نمی شود. بنابراین: " #HereBodyRegularExpression#"

پرانتزها در داخل یک عبارت منظم استفاده می شوند - اینها عبارت های فرعی هستند که می توانند دستکاری شوند، به عنوان مثال:

#^/catalog/(+)/(+)\.html.*#

این عبارت برای دریافت پارامترها در یک رشته طراحی شده است URL. در ابتدای خط یک کاراکتر خاص وجود دارد " ^ "- این به معنای ابتدای خط است. بعد می آید" /کاتالوگ/" - اینجا هیچ کاراکتر خاصی وجود ندارد، این فقط متنی است که باید در خط باشد. سپس با پرانتز مواجه شدیم، یعنی به اولین عبارت فرعی رسیدیم. براکت های مربع نشان دهنده بسیاری از کاراکترهایی است که می توانند در این مکان در خط باشند. علامت " - "یعنی شمارش. علامت" \ " از کاراکترهای خاص فرار می کند. بنابراین، در اولین عبارت فرعی می توانیم CAPITAL و حروف کوچک الفبای لاتین، اعداد از 0 تا 9، یک خط زیر، یک خط تیره و یک نقطه را داشته باشیم. یک خط تیره و یک نقطه کاراکترهای خاص هستند، اما در اینجا آنها فرار شده اند، بنابراین در اینجا فقط نمادها هستند. بعد از پرانتز مربع یک " وجود دارد + " - این بدان معنی است که کاراکتر قبلی (و برای ما مجموعه ای از کاراکترهای مشخص شده در پرانتز است) می تواند 1 بار یا بیشتر ظاهر شود. سپس می آید " / "فقط یک نماد، و یک عبارت فرعی مشابه است. سپس می آید" \.html"متن به چه معناست" .html". و سپس شخصیت های خاص" .* "نقطه به معنای هر کاراکتر، و ستاره به معنای هر مقدار از کاراکتر قبلی است. یعنی بعد از" .html"هر چیزی ممکن است برود.

نشان کمیت، کمیت سازها

در بالا قبلاً چنین نمادهایی را در نظر گرفته ایم که نشان دهنده تعداد نمادهای قبلی است، مانند + و * . در اینجا تمام احتمالات برای تعیین مقدار وجود دارد:

شخصیت های خاص

برای برخی از گروه های شخصیت اختصارات خاصی وجود دارد:

"طمع"

بیایید به مفهوم حرص و آز بیان منظم نگاه کنیم. به عنوان مثال یک خط وجود دارد:

#()#

می خوانیم: subexpression:

به نظر می رسد همه چیز درست است، عبارت فرعی مناسب است:

اما همچنین مناسب است:

این چیزی است که ما به دست خواهیم آورد، زیرا ... عبارات منظم به طور پیش فرض حریص هستند. شما می توانید طمع را با استفاده از اصلاح کننده حذف کنید " U"، مثل این:

#() #U

اصلاح کننده ها

یک عبارت منظم را می توان با اصلاح کننده ها دنبال کرد: " #HereBodyRegularExpression#HereModifiers"انواع اصلاح کننده:

من حالت حساس به حروف کوچک و بزرگ را فعال می کند، یعنی حروف بزرگ و کوچک در عبارت تفاوتی ندارند.
متر نشان می دهد که متن مورد جستجو باید به عنوان متشکل از چندین خط در نظر گرفته شود. به طور پیش‌فرض، موتور عبارت منظم، متن را بدون توجه به اینکه واقعاً چیست، به عنوان یک رشته واحد در نظر می‌گیرد. بر این اساس، فراکاراکترها "^" و "$"ابتدا و انتهای کل متن را نشان می دهد. اگر این اصلاح کننده مشخص شده باشد، به ترتیب ابتدا و انتهای هر خط متن را نشان می دهند.
س متاکاراکتر پیش فرض " . " یک کاراکتر خط جدید را در تعریف خود شامل نمی شود. با مشخص کردن این اصلاح کننده، این محدودیت حذف می شود.
U حرص بیان منظم را از بین می برد
تو عبارات منظم را برای کار با آنها فعال می کند سیریلیک به UTF-8، در غیر این صورت درست کار نمی کند.

php توابع برای کار با عبارات منظم

preg_replace

جستجو و جایگزینی:

Preg_replace (مخلوط $pattern، مختلط $جایگزینی، مختلط $subject [، int $limit = -1 [، int &$count ]]);

هر مقدار می تواند یک رشته یا یک آرایه باشد موضوع $آرایه - یک آرایه برگردانده می شود، در غیر این صورت یک رشته

preg_split

یک رشته را با استفاده از یک عبارت منظم تقسیم می کند:

Preg_split (رشته $pattern، رشته $subject [، int $limit = -1 [، int $flags = 0 ]]);

آرایه ای متشکل از زیر رشته های رشته داده شده را برمی گرداند موضوع، که در امتداد مرزهای مربوط به الگو تقسیم شده است الگو.

بیایید با چیستی یک عبارت منظم شروع کنیم. بنابراین به این سوال پاسخ دهید: آیا در کلمه "تست" "e" وجود دارد؟ "بخور!" تو بگو. سپس سوال دوم را از شما می پرسم که چگونه حرف "ه" را در کلمه "تست" پیدا کردید؟ جواب واضح است، کاراکتر اول یعنی «ت» را می گیریم و با چیزی که به دنبالش هستیم، یعنی با «ه» مقایسه می کنیم. اگر مساوی نباشند، کاراکتر دوم یعنی “e” را می گیریم و آن را با چیزی که به دنبال آن هستیم، یعنی “e” مقایسه می کنیم. وویلا! یک کبریت پیدا شد. پاسخ: کلمه "تست" حاوی حرف "ه" است..

حالا یک سوال دیگر به من پاسخ دهید، عبارت منظم در این مثال کجاست؟ امیدوارم حدس زده باشید که عبارت منظم در اینجا همان چیزی است که ما در کلمه "تست" به دنبال آن هستیم. یعنی حرف «ه» در این مثال یک عبارت منظم است.

عبارات منظم در PHP برای چیست؟ در تمرین من، از عبارات منظم استفاده می شد، به عنوان مثال، برای تعیین اینکه آیا یک آدرس ایمیل درست نوشته شده است یا خیر. چنین عباراتی همچنین برای تعیین صحت نام کاربری و رمز عبور استفاده می شود. با استفاده از عبارات منظم، می توانید آدرس را در یک پیوند پیدا کنید و آن را ذخیره کنید. کارهای زیادی وجود دارد که می توانید انجام دهید با تجزیه و تحلیل آن می توانید عملکرد اصلی عبارات منظم و دو جانبه را تشخیص دهید. عملکرد اصلی، این جستجوی منطبق در یک رشته است. عوارض جانبی شامل ذخیره مسابقات یافت شده و جایگزینی آنها است.

اولین عبارت منظم

در تئوری، ما می‌دانیم که چگونه کاراکتر "e" را در کلمه "تست" پیدا کنیم، اما چگونه این کار در عمل اجرا می‌شود؟ برای استفاده از عبارات منظم در php معمولاً از توابع زیر استفاده می شود:

preg_match("عبارت منظم (الگو)"، "متغیری که جستجو در آن انجام می شود"، "متغیری که نتیجه جستجو در آن ذخیره می شود (پارامتر اختیاری)"); - عملکرد تطبیق
preg_replace("عبارت منظم (الگو)"، "مطابقت یافت شده با چه چیزی جایگزین شود"، "متغیری که جایگزینی در آن انجام شده است"); - تعویض تابع

بیایید استفاده از این توابع را شروع کنیم در اینجا نمونه ای از جستجوی کاراکتر "e" در کلمه "test" آورده شده است:

$a = "تست";
if(preg_match("/e/",$a)) echo "پیدا شد!!";

کد شرایط را توصیف می کند: اگر چیزی مطابق با الگو در متغیر $a یافت شد، پیام "found!!" را نمایش دهید. همانطور که ممکن است متوجه شده باشید، الگوی ما بین دو "/" قرار دارد. در این مورد، نماد "/" نماد شروع و پایان الگوی ما است. امیدوارم این روشن باشد.

همه اینها البته جالب است... اما قالب ما خیلی ساده است، فکر نمی کنید؟ از این گذشته، ما به ندرت نیاز به یافتن نمادی در یک متغیر داریم. در بیشتر موارد، ما باید شخصیت های زیادی و همچنین ناشناخته ها را پیدا کنیم. چگونه بودن؟ بیایید برای خود مشکلی ایجاد کنیم و سعی کنیم آن را حل کنیم. فرض کنید رشته ای متشکل از اعداد و یک حرف انگلیسی مجهول داریم

چگونه این نامه را پیدا کنیم؟ ممکن است هر حرفی از الفبای انگلیسی وجود داشته باشد، پس چگونه می توانید آن را شناسایی کنید؟ خودت جواب سوالت رو دادی هر حرفی هست یعنی در محدوده a تا z هست. می توانید از محدوده ها در عبارات منظم استفاده کنید. اگر ندانیم به دنبال چه شخصیتی هستیم، اما مطمئن باشیم که این کاراکتر یک حرف از الفبای انگلیسی است، ورودی به صورت زیر خواهد بود:

$a = "123a321";
if(preg_match("//",$a)) echo "پیدا شد!!";

توجه داشته باشید که محدوده در پرانتزهای "[" "] محصور شده است. هر چیزی که در این پرانتزها قرار می گیرد به این صورت تعریف می شود یکینماد، در این مورد نماد از a تا z متغیر است. اگر لازم باشد نه یک حرف، بلکه یک عدد پیدا کنیم، ورودی به این صورت خواهد بود:

$a = "abc1cba";
if(preg_match("//",$a)) echo "پیدا شد!!";

همچنین می خواهم توجه داشته باشم که عبارات منظم به حروف بزرگ و کوچک حساس هستند، بنابراین کاراکترهای "A" و "a" کاملاً متفاوت هستند، برای جستجوی هر دو کاراکتر، اینگونه بنویسید:

$a = "123a321";
if(preg_match("//",$a)) echo "پیدا شد!!";

همچنین جستجویی برای حروف روسی وجود دارد که به همان روشی که با حروف انگلیسی انجام می شود:

$a = "123×321";
if(preg_match("/[a-zA-Z]/",$a)) echo "پیدا شد!!";

متا شخصیت ها

ما یاد گرفتیم که چگونه یک کاراکتر ناشناخته را در یک رشته جستجو کنیم. اگر باید چندین کاراکتر را پیدا کنیم چه کنیم؟ به اصطلاح متاسامبول ها به کمک می آیند... فرض کنید رشته ای با اعداد و حروف داریم، چگونه می توانیم آن را در قالب توصیف کنیم؟ شما می توانید این کار را انجام دهید:

خط - 123a321
نمونه -

هوم... الگو در واقع با رشته ما مطابقت دارد، و هنگامی که برای انطباق بررسی شود، آن چیزی است که مدتها انتظارش را می کشیدیم! اما این یک رکورد دست و پا گیر است، فکر نمی کنید؟

در اینجا نحوه کوتاه کردن آن آمده است:

خط - 123a321
نمونه - *

به نظر من کوتاهتر است. نماد "*" چیست؟ این همان متاس نماد است، یعنی نمادی که توضیح دادیم (یعنی نمادی که می تواند شامل اعداد 0 تا 9 یا حروف الفبای انگلیسی از a تا z باشد) می تواند به طور نامحدود یا بیش از یک بار تکرار شود. بله بله! این متاس نماد در یک متغیر خالی مطابقت پیدا می کند، زیرا حتی عدم وجود نمادی که توضیح دادیم به درستی باز خواهد گشت! این را به خاطر بسپار

چه متاکاراکترهای دیگری وجود دارد؟

به عنوان مثال، متاکاراکتر "+" تقریبا شبیه متاکاراکتر "*" با یک استثنا کوچک است. حتی اگر هیچ کاراکتری وجود نداشته باشد، "*" درست برمی گردد، و "+" وجود حداقل یک کاراکتر را بررسی می کند. یعنی اگر خطی مستلزم حضور باشد کمترینیک کاراکتر سپس به جای "*" از "+" استفاده کنید

متاکاراکتر "؟" نیز اغلب استفاده می شود. به این معنی که خط نباید بیش از یک کاراکتر مورد نظر داشته باشد. بگذارید چند مثال برای دو متاکاراکتر آخری که توضیح دادم بیاورم.

فرض کنید باید رمز عبور کاربر را از نظر صحت بررسی کنیم. بیایید به این فکر کنیم که رمز عبور کاربر باید شامل چه چیزی باشد؟ خب، اولاً باید حداقل یک شخصیت باشد. ثانیا، باید فقط شامل اعداد و حروف الفبای انگلیسی باشد، بنابراین عبارت منظم مانند این خواهد بود:

$a = "qwerty12345";

به چه شخصیت هایی اجازه می دهیم؟ حروف انگلیسی هر مورد و اعداد. حالا سعی کنید به جای رمز عبور یک خط خالی بگذارید.

$a = "";
if(preg_match("/+/",$a)) echo "رمز عبور صحیح است";

پیام «رمز عبور درست است» را نخواهید دید. چرا؟ زیرا متاکاراکتر "+" رشته را بررسی کرد تا ببیند حداقل یک کاراکتر دارد یا خیر.

و حالا یه ترفند کوچولو، بیایید یه نگاهی به بیانمون بیندازیم، ما اجازه ندادیم، خوب، یک فاصله در آن بگوییم، درست است؟ در انتهای رمز عبور فاصله بگذارید و اجرا کنید

$a = "qwerty12345";
if(preg_match("/+/",$a)) echo "رمز عبور صحیح است";

و چرا پیام خود را در مورد رمز عبور صحیح می بینیم؟ خیلی ساده است... تابع preg_match(); بررسی خود را در اولین مسابقه متوقف می کند. یعنی علامت "q" با الگویی که توضیح دادیم مطابقت دارد و بقیه چیزها دیگر برای تابع مهم نیستند، چه باید بکنیم؟ در اینجا نحوه رفع آن آمده است:

$a = "qwerty12345";
if(preg_match("/^+$/",$a)) echo "رمز عبور صحیح است";

با افزودن یک "^" در ابتدای عبارت و یک "$" در پایان، به تابع می گوییم که الگو باید با چه چیزی مطابقت داشته باشد. همهخط اگر این کد را اجرا کنید، پیام را نخواهید دید، زیرا یک کاراکتر غیرقانونی در انتهای رمز عبور وجود دارد - یک فاصله

حالا متاکاراکتر "+" را به متاکاراکتر "?" تغییر دهید. به نظر شما چه اتفاقی خواهد افتاد؟ به درستی، هیچ پیامی در مورد صحت رمز عبور وجود نخواهد داشت، زیرا رمز عبور حاوی بیش از یک کاراکتر است. امیدوارم کار این سه متاکاراکتر پرکاربرد را به درستی توضیح داده باشم

گاهی اوقات "نه" بهتر است

ما حداقل یاد گرفته ایم که چگونه رمز عبور صحیح را بررسی کنیم و این خوب است! اجازه دهید در مورد روش دیگری برای جستجوی چیزی در یک رشته به شما بگویم. فرض کنید باید عدم وجود اعداد در یک رشته را بررسی کنیم. چگونه انجامش بدهیم؟ خط اینجاست:

(من به طور خاص این نمادهای "-_+()" را در آن معرفی کردم تا زندگی مانند عسل به نظر نرسد ...) می توانیم عبارت زیر را فرموله کنیم:

اما باید اعتراف کنید، ما همیشه نمی دانیم که چه کاراکترهایی در یک خط استفاده می شود، اما مطمئناً می دانیم که نباید اعداد در آن وجود داشته باشد! بنابراین منطقی تر خواهد بود که به سادگی الگویی بنویسیم که خطوطی را در آن نادیده بگیرد خیراعداد، و نه آنهایی که در آنها وجود دارد "وای خدای من چقدر نمادهای نامفهوم!!!". در اینجا یک مثال از یک عبارت درست ترکیب شده برای چنین مشکلاتی آورده شده است:

$a = "a-_+()";
if(preg_match("/^[^0-9]+$/",$a)) echo "بدون عدد!";

چگونه به این امر رسیدیم؟ نماد را وارد کرده ایم ولی!سرپوش "^" ([^0-9]) قرار داده شده در ابتدا نشان می دهد که وجود خواهد داشت نبایدامیدوارم این موضوع حل شده باشد

خب بیایید کم کم جمع بندی کنیم... من دو مثال با توضیحات می زنم که طی آن یاد می گیریم چگونه نتیجه جستجو را در یک متغیر ذخیره کنیم و نحوه بررسی صحت آدرس پستی را یاد می گیریم.

دیدم و ذخیره کردم!

وبلاگ من

$a = " وبلاگ من";
preg_match("/ /" $a)؛

در عبارت معمولی خود، همه کاراکترهای ممکن را که می‌توان در یک پیوند گنجانده شود، توضیح دادیم. من می خواهم به نقل قول و کاراکترهای "/" در بیان خود توجه کنم، قبل از آنها یک بک اسلش وجود دارد، برای چیست؟ واقعیت این است که "/" و نقل قول خود شخصیت های خاصی هستند. و برای اینکه الگو آنها را به عنوان نمادهای معمولی درک کند، باید آنها را غربال کنیم. فرار با اضافه کردن یک بک اسلش قبل از کاراکترهای خاص انجام می شود. امیدوارم واضح باشه

$a = " وبلاگ من";
preg_match("/ /", $a, $b);

خوب، بر این اساس، لازم است یک پارامتر اضافی در قالب متغیر $b اضافه کنید که لینک یافت شده در آن ذخیره شود. همچنین باید بدانید که نتیجه جستجو در یک آرایه قرار می گیرد. بنابراین متغیر $b یک آرایه است. اطلاعاتی که ما به دنبال آن هستیم در زیر شاخص 1 قرار دارد. این به این معنی است که نتیجه جستجو در متغیر $b است. بیایید نتیجه را روی صفحه نمایش دهیم:

$a = " وبلاگ من";
preg_match("/ /", $a, $b);
echo $b;

آدرس درست رمز موفقیت است!

و در نهایت پاسخ به این سوال که آیا ایمیل صحیح است؟ ابتدا باید دریابید که چه شخصیت هایی در آدرس ها مجاز هستند؟ تا آنجا که من می دانم، شخصیت های مجاز عبارتند از:

  • حروف انگلیسی، اعداد، "_"، "-" اممم همه چیز به نظر می رسد ... ما از این کار خواهیم کرد.
  • بعد ما "@" داریم
  • بعد، حروف انگلیسی
  • بعد، دوره
  • و باز هم حروف انگلیسی...

بنابراین عبارت منظم به صورت زیر خواهد بود:

$a = " [ایمیل محافظت شده]";
if(preg_match("/^+@+.+$/", $a)) echo "آدرس ایمیل درست است!";
else echo "آدرس ایمیل به درستی نوشته نشده است!";

خب...امیدوارم اینگونه رکوردها الان شما را نترسانند و کاملا بتوانید آنها را درک کنید.

در آخر می خواهم چیزی بگویم. این مقاله دست و پا گیر بود و در عین حال تنها بخشی از احتمالات را پوشش داد. اگر در حال خواندن این جمله هستید، به احتمال زیاد آن را تا انتها خوانده اید، که از شما بسیار سپاسگزارم

با توجه به سری مقالات توسعه وبلاگ cms قسمت اول مجموعه من آن را تعطیل اعلام می کنم!در آینده نزدیک ما شروع به پیاده سازی پنل مدیریت خواهیم کرد، بنابراین اگر سوالی دارید، خوشحال می شوم که پاسخ دهم. بهترین ها برای شما، این تمام چیزی است که من دارم!

بهترین مقالات در این زمینه