Uy / Internet / Php oddiy iboralar preg match. php da oddiy ifodalar. Ikki tirnoqni aqlli tirnoq bilan almashtirish

Php oddiy iboralar preg match. php da oddiy ifodalar. Ikki tirnoqni aqlli tirnoq bilan almashtirish


Juda kuchli va foydali xususiyatlardan biri PHP tili- muntazam iboralarni qo'llab-quvvatlash. Ko'pgina dasturchilar, ham yangi boshlanuvchilar, ham juda tajribalilar, muntazam ifoda tilining aniq murakkabligi va murakkabligidan qo'rqishadi. Lekin sizni ishontirib aytamanki, bunga arziydi. Muntazam iboralardan foydalanish matnlarni va zaif tuzilgan ma'lumotlarni qayta ishlash ishini sezilarli darajada osonlashtiradi.


Muntazam iboralar maxsus tilda yozilgan iboralardir.


Xavotir olmang, tilni tushunish juda oson, sizga faqat tajriba va amaliyot kerak bo'ladi. O'ylaymanki, siz bir necha bor matnga ega bo'lgan holatlarga duch kelgansiz (masalan, Microsoft Word


) va unda siz muhim narsani topishingiz kerak. Agar siz aniq nimani qidirayotganingizni bilsangiz, hamma narsa oddiy: qidiruv dialogini chaqiring, qidiruv so'zini kiriting, tugmani bosing va voila - matn topildi. Agar siz qidirayotgan ma'lumot turini oldindan bilsangiz nima qilasiz? Misol uchun, siz barcha manzillarni topish vazifasiga duch kelasiz elektron pochta

bir necha yuz varaqdan iborat hujjatda. Ba'zilar hujjatni qo'lda ko'radi, ba'zilari qidiruvga itni (@) kiritadi va uni qidiradi. Qabul qilaman - ikkala variant ham g'alati, rahmatsiz ish.

Muntazam ibora ma'lum qonun va qoidalarga muvofiq tuzilgan matn qatoridir. Satr belgilar va belgilar guruhlari, metabelgilar, kvantifikatorlar va modifikatorlardan iborat.

Belgilar ostida Ushbu holatda har qanday alifboning har qanday belgilari tushuniladi. Va nafaqat o'qilishi mumkin. Buni amalga oshirish uchun siz o'qilmaydigan belgini osongina kiritishingiz mumkin, shunchaki uning kodini o'n oltilik shaklda bilishingiz kerak; Masalan:

// o'qiladigan belgilar a E // o'qilmaydigan belgilar va kodlar \x41 - "A" harfi bilan bir xil \x09 - yorliq belgisi

Belgilar guruhi ketma-ket yozilgan bir nechta belgilar:

Oʻrtacha ACZms

Men sizning e'tiboringizni darhol qaratmoqchiman - muntazam iboralardagi "bo'shliq" ham muhim belgi hisoblanadi, shuning uchun iboralarni yozishda ehtiyot bo'ling. Misol uchun, bu belgilar guruhlari TURLI iboralardir:

ABC WHERE ABC WHERE

Tilning keyingi elementi metabelgilardir. "Meta" prefiksi bu belgilar boshqa belgilar yoki ularning guruhlarini tavsiflashini bildiradi. Jadvalda muntazam ifoda tilining asosiy meta-belgilari tasvirlangan:

Maxsus belgilarni belgilash uchun meta-belgilar
() Qavslar. Ichki iboralarni belgilaydi.
| Tanlash meta-belgi
^ Satr metabelgisining boshlanishi
$ Qator oxiri metabelgisi
\n Satr tasmasi belgisi (oltilik kod 0x0A)
\r Karetaning qaytish belgisi (oltilik kod 0x0D)
\t Tab belgisi (oltilik kod 0x09)
\xhh 0xhh oʻn oltilik kodli belgi kiritilsa, masalan \x42 lotincha “B” harfini kiritadi.
Belgilar guruhlarini belgilash uchun meta-belgilar
. Nuqta. Har qanday xarakter.
\d Raqam (0-9)
\D Raqam emas (0-9 belgilardan tashqari har qanday belgi)
\s Bo'sh belgi (odatda bo'sh joy va yorliq)
\S Boʻsh boʻlmagan belgi (barchasi \s meta-belgisi bilan aniqlangan belgilardan tashqari)
\w "Lug'at" belgisi (so'zlarda ishlatiladigan belgi. Odatda barcha harflar, barcha raqamlar va pastki chiziq ("_"))
\V \w meta-belgi bilan belgilangan belgilardan tashqari hammasi

Jadvalning ikkinchi yarmidagi metabelgilarni eslab qolish juda oson. "d" - raqam (raqam), "s" - belgi (belgi), "w" - so'z (so'z). Agar harf katta bo'lsa, guruh tavsifiga "YO'Q" ni qo'shishingiz kerak.

Masalan, "Qizil formada 1812, yashil formada esa 2009 raqamlari bor" matnini olaylik. Keling, eng oddiy oddiy iboralarga misollarni ko'rib chiqaylik:

\d\d\d\d - 1812 va 2009 raqamlarini topadi \D - barcha harflar, bo'shliqlar va tinish belgilari \s - matndagi barcha bo'shliqlarni topadi.

Ammo bizning misolimizdagi yilni to'rtta emas, balki ikki raqam bilan yozish mumkin, so'zlarda boshqa tuslanishlar bo'lishi mumkin va hokazo. Kvadrat qavslar yordamida ko'rsatilgan belgilarning kichik to'plamlari bu erda yordam berishi mumkin:

Har qanday raqamni bildiradi (\d bilan bir xil) - juft raqamni bildiradi - lotin alifbosining istalgan belgisini (har qanday holatda) yoki raqamni bildiradi.

Misol uchun, test satridagi \d\d\d ifodasi faqat 1812 ni topadi, lekin 2009 emas. Bu ibora "oxirgi soni 0,2,4,6 bo'lgan to'rtta raqamning barcha ketma-ketligini toping yoki" deb o'qilishi kerak. 8".

Bizda faqat miqdor va o'zgartiruvchilarni eslatib o'tish kerak.

Kvantor - bu belgi yoki belgilar guruhi necha marta paydo bo'lishi kerakligini aniqlaydigan maxsus konstruktsiyadir. Miqdor ko'rsatkichi "()" jingalak qavs ichida yoziladi. Ikki yozish formati mumkin: aniq va diapazon. Aniq format quyidagicha yozilgan:

Bu erda X - oldingi belgi yoki guruh necha marta takrorlanishi kerak. Masalan, ifoda

Yozib olishning ikkinchi shakli diapazondir. sifatida qayd etilgan

(X, Y) // yoki (,Y) // yoki (X,)

bu erda X - minimal va Y - maksimal takrorlash soni. Masalan:

"ketma-ket yozilgan ikki-to'rtta raqam" deb o'qing. Agar chegaralardan biri ko'rsatilmagan bo'lsa, unda hech qanday cheklov qabul qilinmaydi. Masalan:

\w(3,) - uch yoki undan ortiq harf. \d(,5) - umuman raqamlar yo'q yoki bor, lekin beshdan ortiq emas.

Miqdor ko'rsatkichlari bitta belgi yoki guruhga nisbatan qo'llanilishi mumkin:

[A-Yaa-ya](1,3)

Ushbu qurilish matndan bir, ikki yoki uchta harfdan iborat barcha ruscha so'zlarni tanlaydi (masalan, "yoki", "yo'q", "men", "men boraman" va boshqalar).

Jingalak qavslarga qo'shimcha ravishda yana uchta kvantlovchi metabelgi mavjud: "*" (yulduzcha), "+" (ortiqcha) va "?" (savol). Ular talab qilinadigan takrorlashlarning minimal va maksimal soni oldindan noma'lum bo'lgan hollarda qo'llaniladi. Misol uchun, elektron pochta manzillarini qidirishda foydalanuvchi nomida nechta belgi ("it" dan oldin) va domen nomida ("it" dan keyin) qancha belgilar bo'lishini oldindan aytib bo'lmaydi.

"*" meta-belgisi "noldan yoki undan ortiq har qanday miqdor" deb o'qiladi, ya'ni. dizayn

ketma-ket harflarning istalgan sonini, shu jumladan ularning to'liq yo'qligini belgilaydi.

"+" belgisi yulduzchadan faqat kamida bitta belgi kerakligi bilan farq qiladi. Bular. dizayn

bir yoki bir nechta raqam bilan har qanday raqamli ketma-ketlikka mos keladi.

Belgisi "?" bitta belgining yo'qligi yoki mavjudligiga mos keladi. Bular. dizayn

bir yoki ikkita raqam bilan har qanday raqamli ketma-ketlikka mos keladi.

Bu erda "*" va "+" antiifikatorlarining ochko'zlik kabi xususiyatini eslatib o'tish kerak. Gap shundaki, sukut bo'yicha bu belgilar mumkin bo'lgan eng uzun belgilar ketma-ketligiga mos keladi. Masalan, "onam ramkani yuvdi" qatori uchun ibora:

"mama soap ra" ni tanlaydi, bu biroz kutilmagan, chunki biz "ma" ni olishni kutgandik. Ushbu xatti-harakatni o'zgartirish uchun "?" metabelgisidan foydalaning. (so'roq belgisi) miqdor ko'rsatkichidan keyin darhol yoziladi. Bu miqdor belgilovchilarning "ishtahasini" cheklaydi, ularni eng uzun emas, balki birinchi o'yinni qaytarishga majbur qiladi. Endi oldingi misolni o'zgartiramiz:

va kerakli o'yinni oling "ma".

Tilning oxirgi elementi modifikatorlardir. Modifikator - bu muntazam ifodalarni tahlil qilish uchun "tizim" parametrlarini belgilaydigan maxsus belgi. Faqat to'rtta bunday belgilar mavjud, ular alohida yoki bir vaqtning o'zida ishlatilishi mumkin:

i Katta-kichik harflarni sezmaydigan rejimni yoqadi, ya'ni. ifodadagi bosh va kichik harflar farq qilmaydi.
m Qidirilayotgan matnni bir nechta satrlardan iborat deb hisoblash kerakligini bildiradi. Odatiy bo'lib, oddiy ifoda mexanizmi matnni aslida nima bo'lishidan qat'i nazar, bitta satr sifatida ko'radi. Shunga ko'ra, "^" va "$" meta-belgilari butun matnning boshi va oxirini bildiradi. Agar ushbu modifikator ko'rsatilgan bo'lsa, ular mos ravishda matnning har bir satrining boshi va oxirini ko'rsatadi.
s Odatiy metabelgi "." o'z ta'rifida yangi qator belgisini o'z ichiga olmaydi. Bular. ko'p qatorli matn uchun /.+/ ifodasi kutilganidek butun matnni emas, faqat birinchi qatorni qaytaradi. Ushbu modifikatorni belgilash ushbu cheklovni olib tashlaydi.
U Sukut bo'yicha barcha miqdoriy meta-belgilarni "ochko'z bo'lmagan" qiladi. Tilning ba'zi modifikatsiyalarida (xususan, PHPda) "U" o'rniga "g" belgisi qo'llaniladi, bu ma'noga ko'proq mos keladi ("g" inglizcha "ochko'z", "ochko'z" so'zining qisqartmasi. ).

Jadvalda muntazam iboralarning eng mashhur va kerakli namunalari keltirilgan. Ulardan ba'zilari siz uchun murakkab va noqulay bo'lib tuyulishi mumkin, ammo batafsil o'rganish bilan siz shubhasiz tushunasiz.

PHPda oddiy ifodalar.

PHPda muntazam ifodalar bilan ishlash uchun maxsus funksiyalar mavjud bo'lib, ularning ro'yxati qisqacha tavsif jadvalda keltirilgan:

int preg_match (satr namunasi, satr mavzusi [, massiv mos keladi])

Funktsiya mavzu mazmuni naqsh namunasiga mos kelishini tekshiradi. Agar mosliklar topilsa 1 ni qaytaradi, aks holda 0 ni qaytaradi. Agar ixtiyoriy matchlar massivi parametrini belgilasangiz, funksiya bajarilganda unga bitta element kiritiladi - birinchi moslik topilgan.

int preg_match_all (satr namunasi, satr mavzusi, massiv mos keladi [, int tartibi])
Funktsiya avvalgisi bilan bir xil, yagona farqi shundaki, u butun matnni qidiradi va matches massivida topilgan HAMMA mosliklarni qaytaradi.
aralash preg_replace (aralash naqsh, aralash almashtirish, aralash mavzu [, int chegarasi])
Oldingi ikkala funksiya singari, preg_replace naqshga mos keladigan matn qismini qidiradi. Funktsiya barcha topilgan fragmentlarni parametrlarda ko'rsatilgan matn bilan almashtiradi.
aralash preg_replace_callback (aralash naqsh, aralash qayta qo'ng'iroq, aralash mavzu [, int limiti])
Funktsiya avvalgisining kengaytirilgan versiyasidir. Asosiy farq shundaki, bu funktsiya parametrlarga matnni tahlil qiladigan va almashtirish matnini yaratadigan funktsiya nomini beradi.
preg_split massivi (satr namunasi, satr mavzusi [, int chegarasi [, int bayroqlari]])
Bu funksiya explode() va split() funksiyalariga o'xshaydi. Uning o'ziga xosligi shundaki, ajratuvchi turg'un qator emas, balki muntazam ifodadir. Funktsiya manba ma'lumotlarini elementlarga ajratadi va ularni chiqish massiviga joylashtiradi.
preg_grep massivi (satr namunasi, massiv kiritish)
Funktsiya massivlarda muntazam qidirish uchun mo'ljallangan. Qidiruv uchun shablon va kirish ma'lumotlari massivi ko'rsatiladi va faqat shablonga mos keladigan elementlardan iborat massiv qaytariladi.

Ko'rib chiqilgan funktsiyalar ro'yxati to'liq emas, ammo bu oddiy iboralar bilan ishlashni muvaffaqiyatli boshlash uchun etarli. Agar siz ushbu mavzuga qiziqsangiz, qo'shimcha adabiyotlarni o'qing (masalan, Fridlning "Oddiy iboralar" kitobi). Bundan tashqari, o'quv maqsadlari uchun men ulardan birini o'rnatishni tavsiya qilaman maxsus dasturlar muntazam ifodalarni sinab ko'rish uchun (masalan, "PCRE" yoki "RegEx Builder").

Keling, muntazam ifoda nima ekanligini bilib olaylik. Xo'sh, menga bu savolga javob bering: "test" so'zida "e" bormi? "Yeng!" deysiz. Unda men sizga ikkinchi savolni beraman test so'zida "e" harfini qanday topdingiz? Javob aniq, biz birinchi belgini, ya'ni "t" ni olamiz va uni biz izlayotgan narsa bilan, ya'ni "e" bilan solishtiramiz. Agar ular teng bo'lmasa, biz ikkinchi belgini, ya'ni "e" ni olamiz va uni biz izlayotgan narsa, ya'ni "e" bilan solishtiramiz. Voila! Gugurt topildi. Javob: "Test" so'zida "e" harfi mavjud.

Endi menga yana bir savolga javob bering, bu misoldagi muntazam ibora qayerda? Umid qilamanki, siz bu erdagi muntazam ibora biz "sinov" so'zidan qidirayotgan narsa ekanligini taxmin qildingiz. Ya'ni, bu misoldagi "e" harfi muntazam ifodadir.

PHPda muntazam ifodalar nima uchun ishlatiladi? Mening amaliyotimda muntazam iboralar, masalan, elektron pochta manzili to'g'ri tuzilgan yoki yo'qligini aniqlash uchun ishlatilgan. Bunday iboralar foydalanuvchi nomi va parolning to'g'riligini aniqlash uchun ham qo'llaniladi. Muntazam iboralar yordamida siz havoladagi manzilni topishingiz va uni saqlashingiz mumkin. Buni tahlil qilish orqali siz ko'p narsalarni qilishingiz mumkin, siz muntazam iboralarning asosiy funktsiyasini va ikki tomonni aniqlashingiz mumkin. Asosiy funktsiya, bu satrdagi mosliklarni qidirish. Yon ta'siri topilgan o'yinlarni saqlash va ularni almashtirishni o'z ichiga oladi.

Birinchi muntazam ifoda

Nazariy jihatdan, biz "test" so'zida "e" belgisini qanday topishni tushunamiz, ammo bu amalda qanday amalga oshiriladi? PHP da muntazam ifodalardan foydalanish uchun odatda quyidagi funksiyalardan foydalaniladi:

preg_match("muntazam ifoda (naqsh)", "qidiruv amalga oshiriladigan o'zgaruvchi", "Qidiruv natijasi saqlanadigan o'zgaruvchi (ixtiyoriy parametr)"); - Moslash funktsiyasi
preg_replace("normal ifoda (naqsh)", "Topilgan moslikni nima bilan almashtirish kerak", "almashtiriladigan o'zgaruvchi"); - Funktsiyani almashtirish

Keling, ushbu funktsiyalardan foydalanishni boshlaymiz: "test" so'zida "e" belgisini qidirish.

$a = "sinov";
if(preg_match("/e/",$a)) echo "topildi!!";

Kod shartni ta'riflaydi: agar $a o'zgaruvchisida naqshga mos keladigan narsa topilsa, "topildi!!" xabarini ko'rsating. E'tibor bergan bo'lsangiz kerak, bizning shablonimiz ikkita "/" o'rtasida joylashgan. Bunday holda, "/" belgisi naqshimizning boshlanishi va oxirini anglatadi. Umid qilamanki, bu aniq.

Bularning barchasi qiziq, albatta... lekin bizning shablonimiz juda oddiy, shunday emasmi? Axir, biz kamdan-kam hollarda o'zgaruvchida biron bir belgini topishimiz kerak. Aksariyat hollarda biz ko'plab belgilarni, shuningdek, noma'lumlarni topishimiz kerak. Bu qanday bo'lishi mumkin? Keling, o'zimizga muammo qo'yaylik va uni hal qilishga harakat qilaylik. Faraz qilaylik, bizda raqamlar va bitta noma'lum ingliz harflaridan iborat qator bor

Bu xatni qanday topish mumkin? Ingliz alifbosining har qanday harfi bo'lishi mumkin, uni qanday aniqlash mumkin? Siz o'zingiz savolingizga javob berdingiz, har qanday harf bor, ya'ni u a dan z gacha. Muntazam ifodalarda diapazonlardan foydalanishingiz mumkin. Agar biz qaysi belgini qidirayotganimizni bilmasak, lekin bu belgi ingliz alifbosining harfi ekanligini aniq bilsak, unda yozuv quyidagicha bo'ladi:

$a = "123a321";
if(preg_match("//",$a)) echo "topildi!!";

E'tibor bering, diapazon "[" "]" qavslar ichiga olingan. Ushbu qavslar ichiga olingan har qanday narsa bitta belgi sifatida belgilanadi, bu holda belgi a dan z gacha bo'ladi. Agar biz harfni emas, balki raqamni topishimiz kerak bo'lsa, unda yozuv quyidagicha bo'ladi:

$a = "abc1cba";
if(preg_match("//",$a)) echo "topildi!!";

Shuni ham ta'kidlashni istardimki, oddiy iboralar katta-kichik harflarga sezgir, shuning uchun "A" va "a" belgilari butunlay boshqacha, ikkala belgini qidirish uchun shunday yozing:

$a = "123a321";
if(preg_match("//",$a)) echo "topildi!!";

Ingliz tilidagi kabi ruscha harflarni qidirish ham mavjud:

$a = "123×321";
if(preg_match("/[a-zA-Z]/",$a)) echo "topildi!!";

Meta belgilar

Biz satrda noma'lum belgini qanday qidirishni o'rgandik. Agar bir nechta belgilarni topishimiz kerak bo'lsa, nima qilish kerak? Metasimbollar deb atalmishlar yordamga keladi... Faraz qilaylik, bizda raqamlar va harflardan iborat ip bor, uni shablonda qanday tasvirlashimiz mumkin? Buni qilishingiz mumkin:

qator - 123a321
namuna -

Hmm... shablon aslida bizning satrimizga mos keladi va muvofiqlik tekshirilganda u uzoq kutilgan haqiqatni beradi! Lekin bu qandaydir noqulay rekord, shunday emasmi?

Buni qanday qisqartirish mumkin:

qator - 123a321
namuna - *

Menimcha, bu "*" belgisi nima? Bu xuddi shu metasimbol, ya'ni biz tasvirlagan belgi (ya'ni, 0 dan 9 gacha raqamlar yoki ingliz alifbosining harflari, a dan z gacha bo'lgan belgi) cheksiz yoki bir necha marta takrorlanishi mumkin. Ha ha! Ushbu metasimbol bo'sh o'zgaruvchida moslikni topadi, chunki biz tasvirlagan belgining yo'qligi ham haqiqatga qaytadi! Buni eslab qoling

Yana qanday meta-belgilar mavjud?

Masalan, "+" meta-belgisi, bitta kichik istisno bilan deyarli "*" meta-belgisiga o'xshaydi. "*" belgisi bo'lmasa ham true qiymatini qaytaradi va "+" kamida bitta belgi mavjudligini tekshiradi. Ya'ni, agar chiziq kamida bitta belgini talab qilsa, "*" o'rniga "+" dan foydalaning.

Metabelgi ham tez-tez ishlatiladi. Bu shuni anglatadiki, qatorda bittadan ortiq kerakli belgilar bo'lmasligi kerak. Men tasvirlagan oxirgi ikki meta-belgi uchun bir nechta misol keltiraman.

Aytaylik, foydalanuvchi parolining to'g'riligini tekshirishimiz kerak. Keling, foydalanuvchi paroli nimani o'z ichiga olishi haqida o'ylab ko'raylik? Birinchidan, u kamida bitta belgi bo'lishi kerak. Ikkinchidan, u faqat ingliz alifbosining raqamlari va harflarini o'z ichiga olishi kerak, shuning uchun oddiy ibora quyidagicha ko'rinadi:

$a = "qwerty12345";

Biz qanday belgilarga ruxsat beramiz? Har qanday harf va raqamlarning inglizcha harflari. Endi parol o'rniga bo'sh qator qoldirib ko'ring.

$a = "";
if(preg_match("/+/",$a)) echo "Parol to'g'ri";

Siz "Parol to'g'ri" xabarini ko'rmaysiz. Nega? Chunki "+" meta-belgi satrda kamida bitta belgi bor yoki yo'qligini tekshirdi.

Endi biroz hiyla-nayrang, keling, ifodamizni ko'rib chiqaylik, biz ruxsat bermadik, mayli, unda bo'sh joy deylik, to'g'rimi? parol oxirida bo'sh joy qo'ying va ishga tushiring

$a = "qwerty12345";
if(preg_match("/+/",$a)) echo "Parol to'g'ri";

Va nima uchun biz to'g'ri parol haqidagi xabarimizni ko'ramiz? Bu juda oddiy... Funktsiya preg_match(); birinchi o'yinda tekshirishni to'xtatadi. Ya'ni, "q" belgisi biz tasvirlagan naqshga mos keladi va boshqa hamma narsa funktsiya uchun muhim emas. Buni qanday tuzatish kerak:

$a = "qwerty12345";
if(preg_match("/^+$/",$a)) echo "Parol to'g'ri";

Ifodaning boshiga "^" va oxirida "$" qo'shish orqali biz funktsiyaga butun satr naqshga mos kelishi kerakligini aytamiz. Agar siz ushbu kodni ishga tushirsangiz, siz xabarni ko'rmaysiz, chunki parol oxirida noqonuniy belgi - bo'sh joy mavjud.

Endi "+" meta-belgisini "?" ga o'zgartiring. Nima bo'ladi deb o'ylaysiz? To'g'ri, parolning to'g'riligi haqida xabar bo'lmaydi, chunki parolda bir nechta belgilar mavjud. Umid qilamanki, men ushbu uchta tez-tez ishlatiladigan meta-belgilarning ishini to'g'ri tushuntirdim

Ba'zan "yo'q" yaxshiroq

Biz hech bo'lmaganda parolning to'g'riligini tekshirishni o'rgandik va bu yaxshi! Men sizga satrda biror narsani qidirishning yana bir usuli haqida gapirib beraman. Aytaylik, biz satrda raqamlar yo'qligini tekshirishimiz kerak. Buni qanday qilish kerak? Bu qator:

(Hayot asalga o'xshamasligi uchun men unga "-_+()" belgilarini maxsus kiritdim...) Quyidagi ifodani shakllantirishimiz mumkin:

Ammo tan olishingiz kerak, biz har doim ham qatorda qanday belgilar ishlatilishini bilmaymiz, lekin unda raqamlar bo'lmasligi kerakligini aniq bilamiz! Shu bois, “Yo Xudoyim, qanchalar tushunarsiz belgilar!!!” degan so‘zlarni emas, balki raqamlari bo‘lmagan qatorlarni o‘tkazib yuboradigan shablon yozish mantiqan to‘g‘riroq bo‘lar edi. . Mana shunday muammolar uchun to'g'ri tuzilgan ifodaga misol:

$a = "a-_+()";
if(preg_match("/^[^0-9]+$/",$a)) echo "Raqamlar yo'q!";

Biz bunga qanday erishdik? Biz belgini kiritdik, lekin!

Xo'sh, asta-sekin yakunlaylik... Men ikkita misolni tushuntirish bilan keltiraman, ular davomida qidiruv natijasini o'zgaruvchiga saqlashni o'rganamiz va pochta manzilining to'g'riligini tekshirishni o'rganamiz.

Men uni ko'rdim va saqladim!

Mening blogim

$a = " Mening blogim";
preg_match("/ /", $a);

Oddiy iboramizda biz havolaga kiritilishi mumkin bo'lgan barcha belgilarni tasvirlab berdik. Men iboramizdagi qo'shtirnoq va "/" belgilariga ham e'tibor qaratmoqchiman, ular oldida teskari chiziq qo'yilgan, bu nima uchun? Gap shundaki, "/" va iqtibosning o'zi maxsus belgilardir. Va shablon ularni oddiy belgilar sifatida qabul qilishi uchun biz ularni ekrandan o'tkazishimiz kerak. Escape maxsus belgilar oldiga teskari chiziq qo'shish orqali amalga oshiriladi. Umid qilamanki, bu aniq

$a = " Mening blogim";
preg_match("/ /", $a, $b);

Shunga ko'ra, topilgan havola saqlanadigan $b o'zgaruvchisi ko'rinishida qo'shimcha parametr qo'shish kerak. Bundan tashqari, qidiruv natijasi massivda joylashganligini bilishingiz kerak. Shuning uchun $b o'zgaruvchisi massivdir. Biz izlayotgan maʼlumot 1-indeks ostida. Bu qidiruv natijasi $b oʻzgaruvchisida ekanligini bildiradi. Natijani ekranda ko'rsatamiz:

$a = " Mening blogim";
preg_match("/ /", $a, $b);
echo $b;

To'g'ri manzil - muvaffaqiyat kaliti!

Va nihoyat, savolga javob, elektron pochta to'g'rimi? Birinchidan, manzillarda qanday belgilarga ruxsat berilganligini bilib olishingiz kerak? Men bilishimcha, ruxsat etilgan belgilarga quyidagilar kiradi:

  • Inglizcha harflar, raqamlar, "_", "-" ummmm hammasi shunday ko'rinadi ... Biz bundan davom etamiz.
  • Keyingi bizda "@"
  • Keyin inglizcha harflar
  • Keyingi, davr
  • Va yana ingliz harflari ...

Shunday qilib, muntazam ifoda quyidagicha bo'ladi:

$a = " [elektron pochta himoyalangan]";
if(preg_match("/^+@+.+$/", $a)) echo "elektron pochta manzili to'g'ri!";
else echo "elektron pochta manzili to'g'ri yozilmagan!";

Xo'sh... Umid qilamanki, bunday yozuvlar sizni hozir qo'rqitmaydi va siz ularni yaxshi tushunasiz.

Va nihoyat, men bir narsani aytmoqchiman. Maqola og'ir bo'lib chiqdi va shu bilan birga imkoniyatlarning faqat bir qismini qamrab oldi. Agar siz ushbu jumlani o'qiyotgan bo'lsangiz, unda siz uni oxirigacha o'qigansiz, buning uchun sizga katta rahmat

Cms blogini rivojlantirish bo'yicha maqolalar turkumiga kelsak, seriyaning birinchi qismini yopiq deb e'lon qilaman!

Muntazam iboralar naqshga mos keladigan satrdagi ketma-ketliklarni topishga imkon beradi. Misol uchun, "Vasya(.*) Qovoq" shablonini Vasya va Qovoq so'zlari o'rtasida istalgan belgilar soni mavjud bo'lganda ketma-ketlikni topishga imkon beradi. Agar oltita raqamni topishimiz kerak bo'lsa, biz "(6)" ni yozamiz (agar, masalan, oltidan sakkiztagacha bo'lsa, "(6,8)"). Bu belgilar to'plami ko'rsatkichi va kerakli raqam ko'rsatkichi kabi narsalarni ajratadi:

Belgilar to'plami o'rniga har qanday belgini belgilash mumkin - nuqta ma'lum belgilar to'plamini ko'rsatish mumkin (ketliklar qo'llab-quvvatlanadi - eslatib o'tilgan "0-9"). Bundan tashqari, ko'rsatishi mumkin bu to'plam

belgilar". Belgilar soni rasmiy PHP hujjatlarida “kvonifikator” deb ataladi. Bu atama qulay va tushunmovchiliklarga olib kelmaydi. Shunday qilib, kvant ko'rsatkichi ma'lum bir qiymatga ega bo'lishi mumkin - bitta sobit qiymat (“(6)”), yoki raqamli interval (“(6,8)”) yoki mavhum “har qanday raqam, shu jumladan 0” (“( "*"), "har qanday natural son

" - 1 dan cheksizgacha ("+": "document+.txt"), "yoki 0 yoki 1" ("?"). Bu belgilar to'plami uchun standart kvantifikator bitta ("document.txt").

Kombinatsiyalarni yanada moslashuvchan qidirish uchun ushbu "belgilar to'plami - kvant" havolalari metastrukturalarga birlashtirilishi mumkin.

Har qanday moslashuvchan vosita singari, oddiy iboralar ham moslashuvchan, ammo mutlaqo emas: ularning qo'llanish sohasi cheklangan. Misol uchun, agar siz matndagi bitta qattiq satrni boshqasi bilan almashtirishingiz kerak bo'lsa, str_replace dan foydalaning. PHP ishlab chiquvchilari bu maqsadda ereg_replace yoki preg_replace murakkab funksiyalaridan foydalanmaslikni yig'lab iltimos qilishadi, chunki ular chaqirilganda string talqini jarayoni sodir bo'ladi va bu tizim resurslarini jiddiy ravishda sarflaydi. Afsuski, bu yangi PHP dasturchilarining sevimli rakesidir. Muntazam ifoda funksiyalaridan faqat qaysi qator borligini aniq bilmasangizgina foydalaning. Misollar: qidiruv satridan xizmat belgilari va qisqa so'zlar kesilgan qidiruv kodi, shuningdek, qo'shimcha bo'shliqlar kesiladi (aniqrog'i, barcha bo'shliqlar siqiladi: "+" bitta bo'sh joy bilan almashtiriladi). Ushbu funktsiyalardan foydalanib, men o'z sharhini qoldirgan foydalanuvchining elektron pochtasini tekshiraman. Ko‘p narsa qilish mumkin, lekin shuni yodda tutish kerakki, muntazam iboralar hamma narsaga ham ta’sir qilmaydi. Masalan, murakkab almashtirish Ularni qilmaslik yaxshiroqdir. Axir, masalan, dastur shartlarida "(.*)" kombinatsiyasi matnning barcha belgilarini qidirishni anglatadi. Va agar shablon satrning boshiga yoki oxiriga bog'lanmagan bo'lsa, unda shablonning o'zi dastur tomonidan butun matn bo'ylab "ko'chiriladi" va natijada ikki marta qidirish, aniqrog'i qidiruv kvadrati bo'ladi. Boshqa "(.*)" kombinatsiyasi kub ustida takrorlashni anglatadi va hokazo, deb taxmin qilish qiyin emas. Aytaylik, 5 kilobaytlik matnni uchinchi darajaga ko'taring. 125 000 000 000 (so'z bilan aytganda: bir yuz yigirma besh milliard operatsiya) chiqadi. Albatta, agar siz qat'iy yondashsangiz, unchalik ko'p operatsiyalar bo'lmaydi, lekin to'rt-sakkiz barobar kamroq, lekin raqamlarning o'zi muhim ahamiyatga ega.

Belgilar to'plami
. nuqtahar qanday belgi
[] kvadrat qavslarbelgilar sinfi ("har qanday"). Masalan
[^] salbiy belgilar sinfi ("har qanday tashqari")
- chiziqchabelgilar sinfidagi ketma-ketlikni belgilash ("" raqamlar)
\d Faqat raqamlar
\D[^0-9] Raqamlardan tashqari
\w Harflar va raqamlar
\V[^a-z0-9]Harflar va raqamlardan tashqari
\s Bo'shliq belgilari: bo'sh joy, tab, yangi qator
\S[^ ] Bo'shliq belgilaridan tashqari
| (bir|boshqa)Bu joyda sanab o'tilgan variantlardan biri bo'lishi mumkin, masalan: (Vasya|Petya|Masha). Agar siz uning tanlovga kiritilishini istamasangiz, (?: ...) dan foydalaning.

Bittasini belgilash uchun belgilar sinfidan foydalanmang ("+" "+" o'rniga juda yaxshi bo'ladi). Belgilar sinfiga nuqta yozmang, bu har qanday belgi, keyin sinfdagi boshqa belgilar ortiqcha bo'ladi (va salbiy sinf bu barcha belgilarning inkor etilishiga olib keladi).

Miqdor ko'rsatkichi

Miqdor ko'rsatkichi ma'lum bir qiymatni ham, chegaralarni ham ko'rsatishi mumkin. Agar berilgan son kvantiyator chegarasiga tushsa, ifoda fragmenti tahlil qilinayotgan satrga mos keladi deb hisoblanadi. Sintaksis:

{ }

{ , }

Agar siz faqat kerakli minimalni ko'rsatishingiz kerak bo'lsa, lekin maksimal bo'lmasa, shunchaki vergul qo'ying va ikkinchi raqamni yozmang: "(5,)" ("minimal 5"). Eng ko'p ishlatiladigan kvantlar uchun maxsus belgilar mavjud:

Amalda bunday belgilar jingalak qavslarga qaraganda tez-tez ishlatiladi.

Ankerlar

Ushbu belgilar mos ravishda satrning boshida va oxirida paydo bo'lishi kerak.

Ochko'zlik Savol belgisi, shuningdek, miqdorni minimallashtiruvchi vazifasini ham bajaradi:
.*?

Misol natijasi: ochko'z versiya: qalin matn [b]va bu erda - yanada qalinroq qaytarildi Lazy versiya: qalin matn [b]va bu erda - yanada qalinroq qaytarildi

Shablon chizig'i, siz allaqachon sezganingizdek, chiziq chizig'i bilan boshlanadi va tugaydi. Ikkinchidan keyin parametrlar mavjud:

ikatta-kichik harflarsiz qidiruv
m

ko'p qatorli rejim. Odatiy bo'lib, PCRE faqat bitta satrdagi naqsh mosliklarini qidiradi va "^" va "$" belgilari faqat butun matnning boshi va oxiriga mos keladi.

sUshbu parametr o'rnatilganda, "^" va "$" alohida satrlarning boshi va oxiriga mos keladi.
belgisi "." (nuqta) qatorlar uzilishiga ham mos keladi (standart №)A
matn boshiga langarE
U"$" belgisini faqat matn oxiriga mos kelishiga majbur qiladi.
Agar m parametri o'rnatilgan bo'lsa, e'tiborga olinmaydi.Har bir miqdor ko‘rsatkichi uchun “ochko‘zlik”ni o‘zgartiradi (agar miqdor ko‘rsatkichidan keyin “?” bo‘lsa, bu miqdor ko‘rsatkichi endi “ochko‘z” emas).
e
  • O'zgartirish qatori PHP kodi sifatida talqin qilinadi.
  • Muntazam iboralar bilan ishlash funksiyalari preg_grep preg_match - moslikni tekshirishni amalga oshiradi
  • muntazam ifoda
  • . Bu funksiya faqat birinchi moslikni qidiradi! preg_match_all preg_quote - Oddiy iboralardagi belgilardan qochish.
  • Bular. barcha xizmat belgilaridan oldin qiya chiziq qo'yadi (masalan, qavslar,
  • kvadrat qavslar
  • h.k.) shunday qilib ular tom ma'noda olinadi. Agar sizda foydalanuvchi ma'lumotlari mavjud bo'lsa va uni oddiy iboralar yordamida tekshirayotgan bo'lsangiz, buni qilishdan oldin kiruvchi o'zgaruvchidagi xizmat belgilaridan qochish yaxshiroqdir.
preg_replace

preg_replace_callback - Oddiy ifodalarni qidirish va almashtirishni amalga oshiradi

preg_split

preg_grep

preg_grep funktsiyasi - naqshga mos keladigan hodisalar qatorini qaytaradi

Sintaksis

massiv preg_grep (satr namunasi, massiv kiritish [, int bayroqlari])
preg_grep() berilgan naqshga mos keladigan kirish massivining elementlaridan iborat massivni qaytaradi. Flags parametri quyidagi qiymatlarni qabul qilishi mumkin: PREG_GREP_INVERT
Agar bu bayroq o'rnatilgan bo'lsa, preg_grep() funksiyasi ularni qaytaradi
massiv elementlari

, ular berilgan naqsh namunasiga mos kelmaydi.

preg_grep() tomonidan qaytarilgan natija asl ma'lumotlar massivi bilan bir xil indekslardan foydalanadi. Agar bu harakat sizga mos kelmasa, qayta indekslash uchun preg_grep() tomonidan qaytarilgan massivda array_values() dan foydalaning.

Kod namunasi:

preg_split

// Barcha massiv elementlarini qaytaradi // suzuvchi nuqta raqamlarini o'z ichiga oladi $fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);

preg_match preg_match funksiyasi - Muntazam ifoda bilan moslikni bajaradi mos kelishi ko'rsatilgan bo'lsa, u qidiruv natijalari bilan to'ldiriladi. $matches elementi butun naqshga mos keladigan satr qismini, $matches qatorning birinchi pastki naqshga mos keladigan qismini va hokazolarni o'z ichiga oladi.

bayroqlar quyidagi qiymatlarni qabul qilishi mumkin:

PREG_OFFSET_CAPTURE

Qidiruv chapdan o'ngga, chiziq boshidan amalga oshiriladi. Ixtiyoriy ofset parametri qidiruv uchun muqobil boshlang'ich pozitsiyasini belgilash uchun ishlatilishi mumkin. Xuddi shunday natijaga mavzuni substr())($subject, $offset) bilan almashtirish orqali erishish mumkin.

preg_match() funksiyasi topilgan mosliklar sonini qaytaradi. Bu 0 (hech qanday moslik topilmadi) va 1 bo'lishi mumkin, chunki preg_match() birinchi moslik topilgandan keyin ishlashni to'xtatadi. Agar siz barcha mosliklarni topishingiz yoki hisoblashingiz kerak bo'lsa, preg_match_all() funktsiyasidan foydalanishingiz kerak. Preg_match() funksiyasi bajarilish jarayonida xatolik yuzaga kelsa, FALSE qiymatini qaytaradi.

Tavsiya: Agar berilgan satrda pastki qator mavjudligini tekshirish kerak bo'lsa, preg_match() funksiyasidan foydalanmang. Buning uchun strpos() yoki strstr() dan foydalaning, chunki ular ishni tezroq bajaradi.

Misol kodi Misol kodi Misol kodi Misol natijasi:

domen nomi: sayt

preg_match_all

preg_match_all funktsiyasi - satrda global naqsh qidirishni amalga oshiradi

preg_split

int preg_match_all (satr namunasi, satr mavzusi, massiv mos keladi [, int bayroqlari [, int ofset]])

Naqsh naqshining barcha mosliklari uchun satr mavzusini qidiradi va natijani bayroqlar kombinatsiyasi bilan aniqlangan tartibda mosliklar qatoriga joylashtiradi.

Birinchi moslikni topgandan so'ng, keyingi qidiruvlar qatorning boshidan emas, balki oxirgi topilgan hodisaning oxiridan boshlab amalga oshiriladi.

Ixtiyoriy bayroqlar parametri quyidagi qiymatlarni birlashtirishi mumkin (esda tutingki, PREG_PATTERN_ORDER dan PREG_SET_ORDER bilan bir vaqtda foydalanish ma'nosizdir):

PREG_PATTERN_ORDER
Agar bu bayroq o'rnatilgan bo'lsa, natija quyidagicha tartibga solinadi: $matches elementi naqshning to'liq takrorlanish massivini o'z ichiga oladi, $matches elementi birinchi pastki naqshning takrorlanish massivini o'z ichiga oladi va hokazo.

Misol kodi Misol natijasi: misol: , bu test misoli: , bu test

Ko'rib turganimizdek, $out naqshning to'liq takrorlanishi massivini o'z ichiga oladi va $out elementi teglarda joylashgan pastki qatorlar qatorini o'z ichiga oladi.

PREG_SET_ORDER
Agar bu bayroq o'rnatilgan bo'lsa, natija quyidagicha tartiblanadi: $matches elementida birinchi hodisalar to'plami, $matches elementida ikkinchi hodisalar to'plami va hokazo.

Misol kodi Misol natijasi: misol: , misol: bu test, bu test

Bunday holda, $matches massivi birinchi moslik to'plamini o'z ichiga oladi, ya'ni: $matches elementi butun naqshning birinchi takrorlanishini, $matches elementi birinchi kichik naqshning birinchi takrorlanishini va hokazolarni o'z ichiga oladi. Xuddi shunday, $matches massivida har bir topilgan moslik uchun ikkinchi moslik toʻplami va hokazolar mavjud.

PREG_OFFSET_CAPTURE
Agar bu belgi ko'rsatilgan bo'lsa, har bir topilgan pastki satr uchun uning manba qatoridagi o'rni ko'rsatiladi. Shuni esda tutish kerakki, bu bayroq qaytarilgan ma'lumotlarning formatini o'zgartiradi: har bir hodisa massiv sifatida qaytariladi, uning nol elementi topilgan pastki qatorni o'z ichiga oladi va birinchi element ofsetni o'z ichiga oladi.

Agar bayroq ishlatilmasa, standart PREG_PATTERN_ORDER hisoblanadi.

Qidiruv chapdan o'ngga, chiziq boshidan amalga oshiriladi. Ixtiyoriy ofset parametri qidiruv uchun muqobil boshlang'ich pozitsiyasini belgilash uchun ishlatilishi mumkin. Xuddi shunday natijaga mavzuni substr())($subject, $offset) bilan almashtirish orqali erishish mumkin.

Topilgan namunaning takrorlanish sonini (nol bo'lishi mumkin) yoki bajarish paytida xatolik yuz bergan bo'lsa, FALSEni qaytaradi.

Misol kodi Misol kodi Misol natijasi: mos keldi: qalin matn 1-qism: 2-qism: qalin matn 3-qism: mos keladi: meni bosing 1-qism: 2-qism: meni bosing 3-qism: preg_quote

preg_quote funksiyasi - Muntazam ifodalardagi belgilardan qochish

preg_split

string preg_quote (string str [, string limiter])

preg_quote() funktsiyasi str satrini oladi va har bir maxsus belgi oldiga teskari chiziq qo'shadi. Agar shablon skript ishlashi davomida qiymati o'zgarishi mumkin bo'lgan satr o'zgaruvchilari bo'lsa, bu foydali bo'lishi mumkin.

Agar qo'shimcha ajratuvchi parametr ko'rsatilgan bo'lsa, u ham o'chiriladi. Bu PCRE funktsiyalarida ishlatiladigan cheklovchidan qochish uchun foydalidir. Eng keng tarqalgan ajratuvchi "/" belgisidir.

Muntazam iboralarda quyidagi belgilar xizmat belgilari hisoblanadi: . \\ + *? [ ^ ] $ () ( ) = !< > | :

Misol kodi Misol kodi Misol natijasi: Bu kitob *juda* topish qiyin. preg_replace

preg_replace funktsiyasi - muntazam ifoda yordamida qidirish va almashtirishni amalga oshiradi

preg_split

aralash preg_replace (aralash naqsh, aralash almashtirish, aralash mavzu [, int chegarasi])

Qator mavzusida naqsh mosliklarini qidiradi va ularni almashtirish bilan almashtiradi. Agar chegara parametri ko'rsatilgan bo'lsa, shablonning chegaraviy hodisalari almashtiriladi; chegara o'tkazib yuborilsa yoki -1 ga teng bo'lsa, naqshning barcha holatlari almashtiriladi.

O'zgartirish \\n yoki (PHP 4.0.4 dan beri) $n shaklidagi havolalarni o'z ichiga olishi mumkin, ikkinchisi afzalroqdir. Har bir bunday havola qavslar ichidagi n-chi kichik naqshga mos keladigan pastki qator bilan almashtiriladi, n 0 dan 99 gacha bo'lgan qiymatlarni olishi mumkin, havola esa butun naqshning paydo bo'lishiga mos keladi bittadan boshlab chapdan o'ngga raqamlangan.

Subpattern murojaatlari yordamida joker belgilarni almashtirishdan foydalanilganda, niqobdan keyin darhol raqam bo'lgan vaziyat yuzaga kelishi mumkin. Bunday holda, \\n kabi belgi xatoga olib keladi: birinchi kichik naqshga havola va undan keyin 1 raqami \\11 sifatida yoziladi, bu o'n birinchi kichik naqshga havola sifatida talqin etiladi. Ushbu tushunmovchilikni \$(1)1 konstruktsiyasi yordamida bartaraf etish mumkin, bu birinchi kichik naqshga alohida havolani ko'rsatadi, keyin 1 raqami.

Misol kod

Ushbu misolning chiqishi quyidagicha bo'ladi:

Agar funktsiyani bajarish jarayonida naqsh mosligi aniqlansa, o'zgartirilgan mavzu qiymati qaytariladi, aks holda asl mavzu qaytariladi.

preg_replace() ning dastlabki uchta parametri bir o'lchovli massivlar bo'lishi mumkin. Agar massiv kalitlardan foydalansa, massivga ishlov berishda ular massivda joylashgan tartibda olinadi. Naqsh va almashtirish uchun massivdagi kalitlarni belgilash ixtiyoriy. Agar siz almashtirishda ishtirok etadigan naqsh va satrlarga mos keladigan indekslardan foydalanishga qaror qilsangiz, har bir massivda ksort() funksiyasidan foydalaning.

Ayiq qora sekin dangasa itning ustidan sakrab tushdi.

ksort() yordamida biz kerakli natijaga erishamiz:

Sekin qora ayiq dangasa itning ustidan sakrab tushdi.

Agar mavzu parametri massiv bo'lsa, uning har bir elementi uchun naqsh izlash va almashtirish amalga oshiriladi. Qaytarilgan natija ham massiv bo'ladi.

Agar naqsh va almashtirish parametrlari massiv bo'lsa, preg_replace() navbatma-navbat ikkala massivdan bir juft elementlarni oladi va ularni qidirish va almashtirish operatsiyasi uchun ishlatadi. Agar almashtirish massivida naqshga qaraganda ko'proq elementlar bo'lsa, etishmayotgan elementlarni almashtirish uchun bo'sh satrlar olinadi. Agar naqsh massiv bo'lsa va almashtirish satr bo'lsa, naqsh massivining har bir elementi qidiriladi va naqsh bilan almashtiriladi (massivning barcha elementlari o'z navbatida naqsh bo'ladi, almashtirish qatori esa o'zgarmas qoladi). Naqsh satr va almashtirish massiv bo'lgan variant mantiqiy emas.

/e modifikatori preg_replace() funktsiyasining harakatini shunday o'zgartiradiki, almashtirish parametri zarur almashtirishlarni amalga oshirgandan so'ng, PHP kodi sifatida talqin qilinadi va shundan keyingina almashtirish uchun ishlatiladi. Ushbu modifikatordan foydalanganda ehtiyot bo'ling: almashtirish parametri to'g'ri PHP kodini o'z ichiga olishi kerak, aks holda preg_replace() funksiya chaqiruvini o'z ichiga olgan qatorda sintaksis xatosi paydo bo'ladi.

Kod namunasi: Bir nechta naqsh bilan almashtiring

Ushbu misol chiqadi:

$startDate = "5/27/1999";

Misol kodi: /e modifikatoridan foydalanish Kodga misol: Barcha HTML teglarini bosh harfga o'zgartiradi preg_replace_callback

preg_replace_callback funktsiyasi - Qayta qo'ng'iroq qilish funktsiyasidan foydalangan holda muntazam ifodalarni qidirish va almashtirishni amalga oshiradi

preg_split

aralash preg_replace_callback (aralash naqsh, qayta qo'ng'iroq, aralash mavzu [, int limiti])

Ushbu funktsiyaning xatti-harakati ko'p jihatdan preg_replace() ga o'xshaydi, bundan mustasno, almashtirish parametri o'rniga siz kirish parametri sifatida topilgan hodisalar qatoridan o'tadigan qayta qo'ng'iroq funksiyasini belgilashingiz kerak. Kutilgan natija almashtiriladigan satrdir.

Misol kodi (.*?).")", $xml, $match, PREG_PATTERN_ORDER);

$ mosligini qaytarish; )

Muayyan atribut qiymatiga ega XHTML/XML teglarini qidiring

Bu funksiya avvalgisiga juda o'xshaydi, faqat tegga kerakli atributni berishingiz mumkin. Masalan, osongina topishingiz mumkin.

Funktsiya get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($) attr $value = preg_quote($tag_regex = "/]*$attr\s*=\s*" "(["\"])$value\\2[^>]*>(). .*?)/" preg_match_all($tag_regex, $xml, $match, PREG_PATTERN_ORDER); qaytarish $match; )

Veb-ishlab chiquvchilar uchun yana bir foydali vosita! Bu sizga o'n oltilik rang qiymatlarini topish/tekshirish imkonini beradi.

$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "misol 6 muvaffaqiyatli."; )

Maqola sarlavhasini qidiring

Ushbu kod parchasi HTML sahifasida teglar ichidagi matnni topadi va ko'rsatadi.

$fp = fopen("http://www.catswhocode.com/blog", "r"); while (!feof($fp))( $page .= fgets($fp, 4096); ) $titre = eregi("(.*)",$page,$regs); echo $regs; fclose($fp);

Apache jurnallarini tahlil qilish

Aksariyat saytlar taniqli Apache veb-serverida ishlaydi. Agar sizning saytingiz ulardan biri bo'lsa, nega Apache jurnallarini tahlil qilish uchun PHP va oddiy ifodalardan foydalanmaysiz?

//Jurnallar: Apache veb-server //Faqat HTML-fayllarga muvaffaqiyatli xitlar. Sahifani ko'rishlar sonini hisoblash uchun foydalidir. "^((?#mijoz IP yoki domen nomi)S+)s+((?#asosiy autentifikatsiya)S+s+S+)s+[((?#sana va vaqt)[^]]+)]s+"(?: GET|POST|HEAD) ((?#file)/[^ ?]+?.html?)??((?#parameters)[^ ?]+)? HTTP/+"s+(?#status kodi)200s+((?#bayt uzatildi)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agenti) )[^"]*)"$" //Jurnallar: Apache veb-server //Faqat 404 xatolik "^((?#mijoz IP yoki domen nomi)S+)s+((?#basic autentifikatsiya)S+s+S+) s+[((?#sana va vaqt)[^]]+)]s+"(?:GET|POST|HEAD) ((?#fayl)[^ ?"]+)??((?#parameters)[ ^?"]+)? HTTP/+"s+(?#status kodi)404s+((?#bayt o'tkazildi)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agenti) )[^"]*)"$"

Ikki tirnoqni aqlli tirnoq bilan almashtirish

Agar siz tipografiya ishqibozi bo'lsangiz, oddiy qo'sh tirnoqlarni aqlli tirnoq bilan almashtiradigan ushbu oddiy ibora sizga yoqadi. Shunga o'xshash oddiy ibora WordPress-da sahifa mazmunida qo'llaniladi.

Preg_replace("B"b([^"x84x93x94rn]+)b"B", "?1?", $matn);

Keng qamrovli parolni tekshirish

Ushbu muntazam ifoda matn maydoniga kamida oltita belgi, raqamlar, tire va pastki chiziq kiritilishini ta'minlaydi.

Matn maydonida kamida bitta katta harf, bitta kichik belgi va bitta raqam bo'lishi kerak.

"A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"

WordPress: Postdan rasm olish uchun oddiy ifodadan foydalanish

Ko'pchiligingiz WordPress foydalanuvchisi bo'lganingiz uchun sizga maqola matnidan barcha tasvirlarni olish va ularni ko'rsatish imkonini beruvchi kod kerak bo'lishi mumkin.

Ushbu koddan foydalanish uchun uni mavzuingizdagi istalgan faylga joylashtirish kifoya.