Preg herhangi bir karakterle eşleşir. Normal ifadeler (desenler). Örnek kod: Tüm HTML etiketlerini büyük harfe dönüştürür

  • 03.11.2019
1.6K

Düzenli ifadeler (stenografi - normal ifade) arama modellerini oluşturan karakter dizileridir. Esas olarak dizi eşleştirme modellerinde kullanılırlar.

Kısa hikaye

  • Her şey 1940'larda ve 1960'larda, birçok akıllı insanın düzenli ifadelerden bahsettiği zaman başladı;
  • 1970'ler g / yeniden / s;
  • 1980 Perl ve Henry Spencer;
  • 1997 PCRE (Perl Uyumlu Normal İfadeler). İşte o zaman düzenli ifadeler dediğimiz şey ortaya çıkmaya başladı. PCRE, hemen hemen her dil için kitaplıklar sağlar.

PHP'de düzenli ifadelerin yaygın kullanımı

PHP, PCRE ile çalışmak için üç ana işlev içerir - preg_match, preg_match_all ve preg_replace.

Eşleşen karşılaştırma

İfade, bir eşleşme bulunursa 1, değilse 0 ve bir hata oluşursa false döndürür:

int preg_match (string $ pattern, string $ konu [, dizi & $ eşleşmeleri [, int $ flags = 0 [, int $ offset = 0]]])

Bulunan eşleşme sayısını döndüren bir normal ifade örneği:

int preg_match_all (dize $ desen, dize $ konu [, dizi ve $ eşleşmeleri [, int $ flags = PREG_PATTERN_ORDER [, int $ offset = 0]]])

Yenisiyle değiştirme

İfade, değiştirilen dizeyi veya diziyi döndürür ( $ konu nesnesine dayalı):

karışık preg_replace (karışık $ desen, karışık $ değiştirme, karışık $ konu [, int $ limit = -1 [, int $ sayı]])

JavaScript'te düzenli ifadelerin yaygın kullanımı

JavaScript'teki normal ifadeler, PHP'dekiyle neredeyse aynı görünür.

Eşleşen karşılaştırma

Bir eşleşme dizisi döndürür veya eşleşme bulunamazsa null:

string.match (RegExp);

Yenisiyle değiştirme

Değiştirmeler yapılmış bir dize döndüren normal bir ifade:

string.replace (RegExp, değiştirme);

JavaScript'te düzenli ifadelerin özellikleri

  • Nokta hiçbir zaman yeni bir satırla eşleşmez:
  • Normal bir ifade kullanarak eşleştirme ve değiştirme için bunlar olmadan aynı yöntemler.

Normal İfade Kalıpları Yazma İlkeleri

Kod tabanınızda e-posta adreslerini bulmak istediğiniz bir örneğe bakalım. Hedefimiz:

Analog prizler

Normal ifadeler iki tür karakterden oluşur:

  • Özel semboller: ? * + () () ^ $ /.
  • Değişmezler.

Giriş dizilerini cıvatalar ve şablonu onlar için bir dizi bağlayıcı olarak düşünün (uygun sırada).

Özel semboller

Normal ifadeleri test ederken özel karakterlerin nasıl çalıştığını bilmeniz gerekir:

  • Ters eğik çizgi karakteri, normal bir ifadede başka bir özel karakterin yerini alabilir:
  • Nokta ve w -.

Yeni satırlar hariç tüm karakterleri eşleştirin. Bir noktayı ve yalnızca bir noktayı kontrol etmek istiyorsanız -, harfler, sayılar ve alt çizgi için - w

  • Köşeli parantez .

Parantez içindeki karakterleri eşleştirir. Aralıkları destekler. Bazı örnekler:
o - herhangi bir a, b veya c ile eşleşir.
o büyük harfler.
o herhangi bir sayı.
o - herhangi bir küçük harf veya büyük harf alfabetik karakterle eşleşir.
İsteğe bağlı? 0 veya 1 ile eşleşiyor.
yıldız *.

Yıldız işareti 0 veya daha fazla karakteri temsil eder.

1 veya daha fazla karakteri eşleştirin.

Kıvırcık parantezler ().

Minimum ve maksimum değerler. Bazı normal ifade sözdizimi örnekleri:
o (1,) en az 1.
o (1.3) 1'den 3'e.
o (1.64) 1'den 64'e kadar.

E-posta adresleri için bir normal ifade almak için tüm bunları ekleyelim:

/[e-posta korumalı]+ (. +) * / ben


PHP'de nasıl görünüyor:

preg_match_all ("/ [e-posta korumalı]+ (. +) * / i ", $ girdi_satırları, $ çıktı_dizi);

Doğrulama için normal bir ifade kullanma

Zorluk: Girdinin beklediğimiz gibi olduğundan emin olun. Hedef 1: / [^w$. ]/ Hedef 2: / ^ (1,2) $ /

Normal ifadeler, öğeleri bulmak için iyidir, ancak tam olarak ne aradığınızı bilmeniz gerekir.

Doğrulama için ne zaman normal bir ifade kullanmamalısınız?

Birçok durum PHP'nin filter_var işleviyle daha iyi işlenir. Örneğin, e-posta doğrulaması PHP'nin yerleşik filtreleri kullanılarak yapılmalıdır:

filtre_var (" [e-posta korumalı]", FILTER_VALIDATE_EMAIL)

Normal ifadelerle doğrulama

Bir satırın sonundaki normal ifadeler çapa kullanır:

^ - bir satırın başlangıcını gösterir.
$ Satırın sonunu gösteren bir dolar işaretidir.

if (! preg_match ("% ^ (1,2) $%", $ _POST ["subscription_frequency"])) ($ isError = true;)

Hariç tutulan karakter sınıfları

[^ abc] - yeni satırlar dahil a, b veya c dışındaki her şey.

Yalnızca alfasayısal karakterler, tireler, noktalar ve alt çizgiler için girdi sağlayan bir örnek:

if (preg_match ("/ [^ 0-9a-z -_.] / i", $ productCode)) ($ isError = true;)

Bul ve Değiştir

Bul ve değiştir gerçekleştirmek için en yaygın PCRE işlevleri preg_replace () ve preg_replace_callback ()'dir. Ancak aynı şeyi yapan preg_filter() ve preg_replace_callback_array() da vardır. PHP7'den beri preg_replace_callback_array () işlevinin mevcut olduğunu unutmayın.

Listedeki kelimeleri değiştirin

$ konu = "Biraz elma yemek istiyorum."; echo preg_replace ("/ elma | muz | portakal /", "meyve", $ konu);

Sonuç

Biraz meyve yemek istiyorum.

Normal ifade alt kalıplar içeriyorsa ( parantez içinde), $ N veya N'yi değiştirebilirsiniz (burada N bir tamsayıdır> = 1), buna "backlink" denir.

iki sayının permütasyonu

$ konu = "7/11"; echo preg_replace ("/ (d +) / (d +) /", "$ 2 / $ 1", $ konu);

Sonuç

Tarih biçimlendirmesini değiştir

$ konu = "2001-09-11"; echo preg_replace ("/ (d +) - (d +) - (d +) /", "$ 3 / $ 2 / $ 1", $ konu);

Sonuç

Bir etiketteki url'yi değiştirmenin basit örneği

$ konu = "Daha fazla makale için lütfen https://php.earth/doc adresini ziyaret edin."; echo preg_replace ("# (https?: // ([^ s. /] + (?:. [^ s. /] +) * [^ s] *)) #i", "$ 2", $ konu ) ;

Sonuç

PHP regexp, tek bir ifadede yapılabilecek güçlü bir model eşleştirme algoritmasıdır. PHP Normal İfadeleri, karmaşık ifadeler oluşturmak için aritmetik operatörleri (+, -, ^ gibi) kullanır.

Hangi normal ifadeler için kullanılır:

  • Normal ifadeler, tek bir işlev çağırarak dize verilerini tanımlamayı kolaylaştırır. Bu, kod oluştururken zaman kazandırır;
  • Kullanıcı tarafından girilen e-posta adresi, site etki alanı, telefon numarası, IP adresi gibi verileri doğrularken;
  • Arama sonuçlarında anahtar kelimeleri vurgulama;
  • Etiketleri tanımlamak ve değiştirmek için normal ifadeler kullanılabilir.

PHP'de düzenli ifadeler

PHP, normal ifadelerle çalışmanıza izin veren yerleşik işlevler içerir. Şimdi sık kullanılan PHP düzenli ifade işlevlerine bir göz atalım.

  • preg_match - Bir dizgede kalıp eşleştirmesi yapmak için kullanılır. Bir eşleşme bulunursa true, eşleşme bulunamazsa false döndürür;
  • preg_split - bir dizgiyi kalıba göre bölmek için kullanılır, sonuç sayısal bir dizi olarak döndürülür;
  • preg_replace - kalıp eşleştirme ve belirtilen dizeyle değiştirme için kullanılır.

Preg_match, preg_split veya PHP regexp replace gibi normal ifade işlevlerinin sözdizimi aşağıdadır:

İşlev_adı preg_match, preg_split veya preg_replace'dir.
"/ ... /" - eğik çizgiler normal ifadenin başlangıcını ve sonunu belirtir.
"'/ Kalıp /" "eşleştirmemiz gereken kalıptır.
"Nesne", kalıbı eşleştirecek dizedir.

Şimdi yukarıda bahsedilen fonksiyonları kullanmanın pratik örneklerine bir göz atalım.

Preg_match

İlk örnek, belirli bir URL'deki guru kelimesi için basit kalıp eşleştirmesi gerçekleştirmek için preg_match işlevini kullanır.

Aşağıdaki kod, bu örneğin bir uygulamasını gösterir:


Çıktıdan sorumlu olan kodun bölümünü düşünün "Preg_match (' / guru / ', $ my_url)".

"Preg_match (...)" - PHP normal ifade işleviyle eşleşir.
"' / Guru / "" bir düzenli ifade kalıbıdır.
$ My_url, şablonla eşleşecek metni içeren bir değişkendir.

Preg_split

Şimdi preg_split işlevini kullanan başka bir örneğe bakalım.

Bir cümle alıp bir diziye böleceğiz; desen, tek bir boşluk aramak için tasarlanmıştır:

Preg_replace

Kalıp eşleştirmeyi gerçekleştiren ve bulunan sonucu başka bir dizeyle değiştiren preg_replace işlevini düşünün.

Aşağıdaki kod dizide guru kelimesini arar. Arka plan rengini ayarlayan css koduyla değiştirir:

guru", $ metin); echo $ metin;?>

meta karakterler

Yukarıdaki örneklerde basit şablonlar kullanılmıştır. Meta karakterler, bir e-posta adresinin doğrulanması gibi daha karmaşık PHP normal ifade kalıp eşleştirmesine izin verir. Yaygın olarak kullanılan meta karakterlere bir göz atalım.

meta karakter Açıklama Örnek
. Yeni satır karakteri dışında herhangi bir tek karakteri belirtir. /./ - bir karakter içeren herhangi bir şey.
^ / karakterini içermeyen bir satırın başlangıcını belirtir. / ^ PH / - PH ile başlayan herhangi bir satır.
$ Bir satırın sonundaki deseni belirtir. / com $ / - guru99.com, yahoo.com, vb.
* Sıfır veya daha fazla herhangi bir sayıda karakteri belirtir. / com * / - bilgisayar, iletişim vb.
+ Karakter(ler)in en az bir kez meta karakterden önce geçmesini gerektirir. / evet + oo / - yahoo.
Kaçan karakter. /yahoo+.com/ - Bir noktayı gerçek anlam olarak alır.
[…] Karakter sınıfı. // - abc.
a-z Küçük harfleri gösterir. / a-z / - havalı, mutlu, vb.
A'dan Z'ye Büyük harfleri gösterir. / A-Z / - NE, NASIL, NEDEN vb.
0-9 0'dan 9'a kadar herhangi bir rakamı belirtir. /0-4/ — 0,1,2,3,4.

Şimdi bir e-posta adresinin geçerliliğini kontrol eden karmaşık bir PHP normal ifade örneğine bakalım:

Sonuç: e-posta adresi [e-posta korumalı] geçerlidir.

Şablonun açıklaması “ [e-posta korumalı]+. (2.5) $ /] "

"‘ /… / "" Normal bir ifadeyi başlatır ve bitirir.
“^” Küçük veya büyük harflerle, 0'dan 9'a kadar olan sayılarla ve nokta, alt çizgi veya tire ile eşleşir.
« [e-posta korumalı]»@ simgesinin ardından küçük veya büyük harfler, 0'dan 9'a kadar sayılar veya kısa çizgilerle eşleşir.
"+. (2,5) $ /" ters eğik çizgi kullanarak bir noktayı belirtir, ardından büyük veya küçük harfler gelmeli, satır sonundaki karakter sayısı 2 ile 5 arasında olmalıdır.


PHP dilinin en güçlü ve kullanışlı özelliklerinden biri düzenli ifadeleri desteklemesidir. Hem yeni başlayan hem de oldukça deneyimli birçok programcı, düzenli ifade dilinin dış karmaşıklığı ve karmaşasından korkar. Ama sizi temin ederim - buna değer. Normal ifadelerin kullanılması, metin ve kötü yapılandırılmış verilerin işlenmesini büyük ölçüde kolaylaştırır.


Normal ifadeler, özel bir dilde yazılmış ifadelerdir. Paniğe kapılmayın, dili anlamak için yeterince basit, sadece deneyim ve pratik gerekiyor.


Metniniz olduğunda (örneğin, Microsoft Word'de) tekrar tekrar durumlarla karşılaştığınızı ve içinde önemli bir şey bulmanız gerektiğini düşünüyorum. Tam olarak ne aradığınızı biliyorsanız, her şey basittir: arama iletişim kutusunu açtılar, istenen kelimeyi girdiler, düğmeye bastılar ve işte - metin bulundu.


Ancak, yalnızca aradığınız bilgi türünü önceden biliyorsanız ne yapacaksınız? Örneğin, göreviniz birkaç yüz sayfalık belgedeki tüm e-posta adreslerini bulmaktır. Bazıları belgeye manuel olarak göz atacak, bazıları bir köpek (@) arayacak ve onu arayacaktır. Katılıyorum - her iki değişken de zor emek, nankör emek.

Normal ifadelerin kurtarmaya geldiği yer burasıdır. Bir dereceye kadar, normal ifadeler, metin üzerine bindirilen maskeler veya kalıplarla karşılaştırılabilir: metin maskeyle eşleşiyorsa, bu istenen parçadır. Ancak düzenli ifadelerin kullanımına bakmadan önce sözdizimlerine bir göz atacağız.

Normal ifade, belirli yasalara ve kurallara göre oluşturulmuş bir metin dizesidir. Bir dize, karakterlerden ve karakter gruplarından, meta karakterlerden, niceleyicilerden ve değiştiricilerden oluşur.

Bu durumda, semboller, herhangi bir alfabenin herhangi bir sembolü olarak anlaşılır. Ve sadece okunabilir olanlar değil. Bir ifadeye kolayca okunamayan bir karakter ekleyebilirsiniz, bunun için kodunu onaltılık biçimde bilmeniz yeterlidir. Örneğin:

// okunabilir karakterler a Е // okunamayan karakterler ve kodlar \ x41 - "A" harfiyle aynı \ x09 - tablolama karakteri

Bir karakter grubu, sırayla yazılmış bir dizi karakterdir:

Ort. ACZms

Hemen dikkatinizi çekiyorum - normal ifadelerdeki "boşluk" da önemli bir karakter olarak kabul edilir, bu nedenle ifade yazarken dikkatli olun. Örneğin, bu grappa karakterleri FARKLI ifadelerdir:

ABVGDE ABC NEREDE

Bir sonraki dil öğesi meta karakterlerdir. "Meta" öneki, bu sembollerin diğer bazı sembolleri veya onların gruplarını tanımladığı anlamına gelir. Tablo, normal ifade dilinin ana meta karakterlerini gösterir:

Özel Karakterleri Belirtmek İçin Meta Karakterler
() Parantez. İç içe ifadeleri tanımlayın.
| Seçim meta karakteri
^ Satır meta karakterinin başlangıcı
$ Satır sonu meta karakteri
\ n Satır besleme karakteri (onaltılı 0x0A)
\ r Satır başı (hex 0x0D)
\ T Sekme karakteri (onaltılı 0x09)
\ xhh Onaltılık kodu 0xhh olan bir karakter eklemek, örneğin \ x42 Latince "B" harfini ekleyecektir.
Karakter Gruplarını Belirtmek için Meta Karakterler
. Puan. Herhangi bir karakter.
\ NS Basamak (0-9)
\ NS Rakam değil (0-9 arasındaki karakterler dışında herhangi bir karakter)
\ s Boş karakter (genellikle bir boşluk ve bir sekme karakteri)
\ S Boş olmayan karakter (\ s meta karakteri tarafından tanımlanan karakterler dışında her şey)
\ w "Sözlük" karakteri (kelimelerde kullanılan bir karakter. Genellikle tüm harfler, tüm sayılar ve alt çizgi ("_"))
\ B \ w meta karakteri tarafından belirtilen karakterler dışındaki her şey

Tablonun ikinci yarısındaki meta karakterlerin hatırlanması çok kolaydır. "d" - rakam (rakam), "s" - sembol (sembol), "w" - kelime (kelime). Harf büyükse, grup açıklamasına "DEĞİL" eklemeniz gerekir.

Örneğin, "Kırmızı mayo 1812 numaralı, yeşil mayo 2009" metnini alalım. En basit düzenli ifadelerin örneklerine bakalım:

\ d \ d \ d \ d - 1812 ve 2009'u bulur \ D - tüm harfleri, boşlukları ve noktalama işaretlerini bulur \ s - metindeki tüm boşlukları bulur.

Ama sonuçta, örneğimizdeki yıl dört ile değil iki sayı ile yazılabilir, kelimelerin başka çekimleri olabilir, vb. Köşeli parantezler kullanılarak belirtilen karakter alt kümeleri burada yardımcı olabilir:

Herhangi bir rakam anlamına gelir (\ d ile aynı) - çift rakam anlamına gelir - Latin alfabesinin herhangi bir karakterini (her durumda) veya rakamı belirtir.

Örneğin, test satırındaki \ d \ d \ d ifadesi yalnızca 1812'yi bulur, 2009'u bulamaz. Bu ifade "son basamağı 0,2,4,6 olan tüm dört basamaklı dizileri bul veya 8".

Geriye sadece niceleyiciler ve değiştiricilerden bahsetmek kalıyor.

niceleyici bir karakterin veya karakter grubunun kaç kez görüneceğini belirleyen özel bir yapıdır. Niceleyici, küme parantezleri "()" içine alınır. İki kayıt formatı mümkündür: kesin ve aralık. Kesin biçimi şöyle yazılır:

Burada X, bir önceki karakterin veya grubun tekrarlanması gereken sayıdır. Örneğin, ifade

İkinci gösterim şekli aralıktır. olarak yazılmıştır

(X, Y) // veya (, Y) // veya (X,)

burada X minimum ve Y maksimum tekrar sayısıdır. Örneğin:

"iki ila dört ardışık basamak" olarak okur. Sınırlardan biri belirtilmemişse, bir sınırlamanın olmadığı ima edilir. Örneğin:

\ w (3,) - üç veya daha fazla harf. \ d (, 5) - hiç rakam yok veya rakam var, ancak beşten fazla değil.

Niceleyiciler tek bir karaktere veya bir gruba uygulanabilir:

[A-Ya-ben] (1,3)

Bu yapı, metinden tüm Rusça kelimeleri bir, iki veya üç harften seçecektir (örneğin, "veya", "değil", "Ben", "Gidiyorum" vb.)

ile küme parantezlerine ek olarak, üç meta karakter niceleyici daha vardır: "*" (yıldız), "+" (artı) ve "?" (soru). Minimum ve maksimum tekrar sayısının önceden bilinmediği durumlarda kullanılırlar. Örneğin, e-posta adreslerini ararken, bir kullanıcı adında ("köpek" den önce) kaç karakter ve bir alan adında ("köpek" den sonra) kaç karakter olacağını önceden bilemezsiniz.

"*" meta karakteri "sıfırdan veya daha fazla herhangi bir sayı" olarak okunur, yani. tasarım

tam yokluğu da dahil olmak üzere herhangi bir sayıda ardışık harfi tanımlar.

"+" simgesi yıldızdan yalnızca en az bir simge gerektirmesi bakımından farklıdır. Onlar. tasarım

bir veya daha fazla rakamın olduğu herhangi bir sayısal diziyle eşleşir.

Sembol "?" tek bir karakterin yokluğu veya varlığıyla eşleşir. Onlar. tasarım

bir veya iki basamak olan herhangi bir sayısal diziyle eşleşir.

Burada "*" ve "+" antifierlerinin böyle bir özelliğinden bahsetmeye değer. açgözlülük... Sonuç olarak, varsayılan olarak, bu karakterler olası en uzun karakter dizisiyle eşleşir. Örneğin, "Anne çerçeveyi yıkadı" satırı için ifade:

biraz beklenmedik olan "mama soap ra"yı seçecek, çünkü "ma" almamız gerekiyordu. Bu davranışı değiştirmek için "?" (soru işareti), niceleyiciden hemen sonra yazılır. Niceleyicilerin iştahını, onları en uzun eşleşmeyi değil, ilk eşleşmeyi döndürmeye zorlayarak kısıtlar. Şimdi önceki örneği değiştirelim:

ve gerekli "ma" eşleşmesini alıyoruz.

Dilin son unsuru değiştiriciler... Değiştirici, düzenli ifade analizinin "sistem" parametrelerini tanımlayan özel bir karakterdir. Bu tür sadece dört sembol vardır, hem ayrı ayrı hem de aynı anda kullanılabilirler:

ben Büyük/küçük harfe duyarsız modu açar, ör. büyük ve küçük harfler ifadede farklılık göstermez.
m Aranan metnin birden çok satır olarak ele alınması gerektiğini belirtir. Varsayılan olarak, normal ifade motoru, gerçekte ne olduğuna bakılmaksızın metni tek bir dize olarak ele alır. Buna göre, "^" ve "$" meta karakterleri tüm metnin başlangıcını ve sonunu belirtir. Bu değiştirici belirtilirse, sırasıyla metnin her satırının başına ve sonuna işaret ederler.
s Varsayılan meta karakter "." tanımında bir satır besleme karakteri içermez. Onlar. çok satırlı metin için, /.+/ ifadesi beklendiği gibi metnin tamamını değil, yalnızca ilk satırı döndürür. Bu değiştiricinin belirtilmesi bu sınırlamayı kaldırır.
sen Varsayılan olarak tüm meta karakterleri açgözlü yapmaz. Dilin bazı modifikasyonlarında (özellikle PHP'de), "U" yerine, anlama daha uygun olan "g" sembolü kullanılır ("g", İngilizce "açgözlü", "açgözlü" için bir kısaltmadır. ).

Tablo, düzenli ifadelerin en popüler ve kullanışlı örneklerini göstermektedir. Bazıları size karmaşık ve hantal gelebilir, ancak ayrıntılı bir çalışma ile bunu çözeceğinizden şüpheniz olmasın.

PHP'de düzenli ifadeler.

PHP'de düzenli ifadelerle çalışmak için özel işlevler vardır, bunların listesi ve kısa bir açıklaması tabloda verilmiştir:

int preg_match (dize deseni, dize konusu [, dizi eşleşmeleri])

İşlev, konunun içeriğinin kalıpla eşleşip eşleşmediğini kontrol eder. Eşleşme bulunursa 1 döndürür, aksi takdirde 0 döndürür. İsteğe bağlı bir dizi parametresi, eşleşmeler belirtirseniz, işlev yürütüldüğünde buna tek bir öğe eklenir - bulunan ilk eşleşme.

"; print_r ($ bulundu);?>

int preg_match_all (dize modeli, dize konusu, dizi eşleşmeleri [, int sırası])
İşlev öncekiyle aynıdır, tek farkla - tüm metni arar ve eşleşmeler dizisinde bulunan TÜM eşleşmeleri döndürür.
karışık preg_replace (karışık model, karışık değiştirme, karışık konu [, int limit])
Önceki her iki işlev gibi, preg_replace de bir kalıpla eşleşen bir metin parçasını arar. İşlev, bulunan tüm parçaları parametrelerde belirtilen metinle değiştirir.Temizlemeden önce:\ n $ metin \ n \ n "; $ metin = preg_replace (" / (\ n \ s (2,)) / "," ", $ metin); yankı" Temizlikten sonra:\ n $ text "; // metni özel karakterlerden arındırılmış olarak gösterecek // ve fazladan boşluklar mı?>
karışık preg_replace_callback (karma desen, karışık geri arama, karışık konu [, int limit])
İşlev, öncekinin genişletilmiş bir sürümüdür. Temel fark, metni analiz edecek ve alternatif metni oluşturacak fonksiyonun adının parametrelerde bu fonksiyona iletilmesidir.
dizi preg_split (dize deseni, dize konusu [, int limit [, int bayrakları]])
Bu işlev patlat () ve bölme () işlevlerine benzer. Özelliği, ayırıcı olarak sabit bir dize yerine normal bir ifadenin kullanılmasıdır. İşlev, orijinal verileri öğelere böler ve bunları çıktı dizisine yerleştirir.
dizi preg_grep (dize deseni, dizi girişi)
İşlev, dizilerde düzenli arama yapmak için tasarlanmıştır. Arama için bir şablon ve bir girdi verisi dizisi belirtilir ve yalnızca şablonla eşleşen öğelerden oluşan bir dizi döndürülür.

Yukarıdaki işlevler listesi tam olmaktan uzaktır, ancak düzenli ifadelerle çalışmaya başarılı bir şekilde başlamak için oldukça yeterlidir. Bu konuyla ilgileniyorsanız, ek literatürü okuduğunuzdan emin olun (örneğin, Friedl'in "Normal İfadeler" kitabı). Ek olarak, eğitim amacıyla, düzenli ifadeleri test etmek için özel programlardan birini (örneğin, "PCRE" veya "RegEx Builder") yüklemenizi öneririm.

karışık preg_match(dize deseni, dize konusu [, dizi ve eşleşmeler [, int bayrakları [, int ofset]]])

Eşleşme kalıbına göre verilen metni arar

İsteğe bağlı eşleşmeler parametresi belirtilirse, arama sonuçlarıyla doldurulur. $ eşleşmeleri öğesi, dizenin tüm desenle eşleşen bölümünü içerecek, $ dizenin ilk alt desenle eşleşen bölümüyle eşleşecek ve bu şekilde devam edecektir.

bayraklar aşağıdaki değerleri alabilir:

PREG_OFFSET_CAPTURE

Bu bayrak belirtilirse, bulunan her alt dizi için orijinal dizideki konumu belirtilecektir. Bu bayrağın döndürülen verilerin biçimini değiştirdiği unutulmamalıdır: her oluşum, sıfır öğesi bulunan alt dizeyi içeren ve ilki ofseti içeren bir dizi olarak döndürülür. Bu bayrak PHP 4.3.0 ve üzeri sürümlerde mevcuttur.

Ek bayraklar parametresi PHP 4.3.0'dan beri mevcuttur.

Arama, satırın başından itibaren soldan sağa doğru yapılır. Arama için alternatif bir başlangıç ​​konumu belirtmek için isteğe bağlı ofset parametresi kullanılabilir. İsteğe bağlı ofset parametresi PHP 4.3.3'ten beri mevcuttur.

Yorum Yap: offset parametresinin kullanılması, bir işlev çağrısında eşleşen dizenin substr ($ konu, $ offset) ile değiştirilmesine eşdeğer değildir. preg_match_all () desen gibi koşulları içerebileceğinden ^ , $ veya (? ... Karşılaştırmak:

Bu örnek yapılırken

İşlev preg_match () bulunan eşleşme sayısını döndürür. 0 (eşleşme bulunamadı) ve 1 olabilir, çünkü preg_match () bulunan ilk eşleşmeden sonra sona erer. Tüm eşleşmeleri bulmanız veya saymanız gerekiyorsa, işlevi kullanmalısınız. preg_match_all ()... İşlev preg_match ()İadeler YANLIŞ yürütme sırasında herhangi bir hata oluşması durumunda.

Çabuk: işlevi kullanmayın preg_match () belirli bir dizgede bir alt dizginin varlığını kontrol etmeniz gerekiyorsa. Bunun için kullanın şeritler () veya strstr ()çünkü bu görevi çok daha hızlı tamamlayacaklar.


Örnek 2. Metinde "web" kelimesini arayın

/*
Desendeki özel dizi \ b, bir kelime sınırı anlamına gelir,
bu nedenle, "web" kelimesinin yalnızca izole bir oluşumu eşleşir
"dokuma" veya "örümcek ağı"nın aksine maske.
*/
if (preg_match ("/ \ bweb \ b / i", "PHP, tercih edilen web betik dilidir.")) {
Eko "Giriş bulundu.";
) Başka (
Eko "Giriş bulunamadı.";
) preg_match ("/ \ bweb \ b / i", "PHP, tercih edilen web sitesi betik dilidir.")) {
Eko "Giriş bulundu.";
) Başka (
Eko "Giriş bulunamadı.";
}
?>