İşleç | Açıklama |
---|---|
\ | çeşitli kullanımları olan genel önceleme karakteri |
^ | konu başlangıcıyla eşleşme işleci (satır kipinde veya çok satırlı kipte) |
$ | konu sonuyla eşleşme işleci (satır kipinde veya çok satırlı kipte) |
. | (öntanımlı olarak) satırsonu hariç herhangi bir karakterle eşleşme işleci |
[ | Karakter sınıfı tanımı başlatma işleci |
] | Karakter sınıfı tanımı bitirme işleci |
| | veya işleci |
( | alt şablon başlatma işleci |
) | alt şablon bitirme işleci |
? | “(” işlecinin anlamını genişletir; 0 veya 1 kere eşleşir, ayrıca tamahkarlığa son verilir. |
* | 0 veya daha fazlasıyla eşleşme işleci |
+ | 1 veya daha fazlasıyla eşleşme işleci |
{ | Yineleme başlatma işleci |
} | Yineleme bitirme işleci |
Köşeli ayraçların içinde kalan kısım “karakter sınıfı” adını alır. Bir karakter sınıfı içinde özel anlamı olan işleçler şunlardır: | |
\ | genel önceleme karakteri |
^ | sınıfın ilk karakteri olduğu takdirde sınıfla eşleşmeme işleci |
– | karakter aralığı işleci |
] | karakter sınıfı bitirme işleci |
Örneğin ‘^’ ve ‘$’ işleçlerini ele alalım. Bunlar bir dizgeni başında ve sonunda neler yapıyor?
‘^bir’ – “bir” ile başlayan dizge.
‘yapıyor$’ – “yapıyor” ile biten dizge.
‘^elma$’ – “elma” ile başlayan ve biyen dizgeler. Bu, sorgunun kendisine, yani “elma” dizgesine eşittir.
“elma” – Herhangi bir yerinde “elma” içeren dizge.
Eğer her iki sembolü de kullanamıyorsanız, son örnekte olduğu gibi dizgeyi her yerde arayabilirsiniz.
‘*’,’?’ ve ‘+’ sembolleri vardır. Bunlar bir karaktere veya bir karakter grubuna eşit olabilir. “sıfır veya daha fazla”, “bir veya daha fazla” ve “sıfır veya bir”. Bunlar ne demektir? Birkaç örnek:
‘ab*’ – “b” karakterinden sıfır veya daha fazla olabilir. (‘a’,’ab’,’abb’,’abbb’…)
‘ab+’ – “b” karakterinden bir veya daha fazla olabilir. (‘ab’,’abbb’,’abbbb’,…)
‘ab?’ – “b” karakterinden sıfır veya bir tane var. (‘ab’,’a’)
‘a?b+$’ – “a” ile başlayan ve bir veya daha fazla “b” içeren bir dizge, başka bir dizgenin sonunda. (‘bu bir abbb’)
Ayrıca küme parantezi kullanarak içerik limitimi belirleyebilirsiniz.
‘ab{2}’ – “abb” şeklinde sadece iki “b” içeren dizge.
‘ab{2,9}’ – 2 ve 9 arasında bir sayı miktarınca “b” içeren dizge. Bu sayılara 2 ve 9 da dahildir.
‘ab{2,}’ – 2 veya daha fazla “b” içeren dizge.
Daha ayrıntılı örnek kullanımlar için bazı adresler:
Diğer Örneklemler
[abc] tek bir karakter: a, b veya c
[^abc] a, b, veya c dışında herhangi tek bir karakter.
[a-z] a-z arasındaki herhangi bir karakter. (sadece küçük harf ve ingilizce harfler)
[a-zA-Z] a-z veya A-Z arasındaki herhangi bir karakter. (küçük büyük ingilizce harfler)
^ satır başlangıcı
$ Satır bitişi
\A string başlangıcı
\z string bitişi
. Herhangi bir karakter.
\s herhangi bir boşluk karakteri.
\S herhangi boşluk olmayan bir karakter
\d herhangi bir rakam
\D herhangi bir rakam olmayan karakter
\w herhangi bir kelime karakteri. harf, sayı veya alt çizgi
\W herhangi bir kelime dışı karakter
\b kelime sınırlayıcı karakter.
(…) içerideki herşeyi yakala!
(a|b) a veya b karakteri
a? sıfır veya 1 tane a karakteri
a* 0 veya 1 veya birkaç tane a karakteri
a+ 1 veya daha fazla a karakteri
a{3} tam olarak 3 tane a karakteri
a{3,} 3 veya daha fazla a karakteri
a{3,6} 3 ve 6 tane arasında a karakteri
Tüm desenleri preg_match(“/BU KISIMA YAZARAK DENEYEBİLİRSİNİZ/”,$metin);
Kalıp Bazı Örnekler
</?[^>]+>
HTML etiketlerini ifade eder.(((+|-)?\d+(\.\d*)?)|((+|-)?(\d*\.)?\d+))
Negatif veya pozitif tam ve ondalıklı sayı.(\d{4})[.-/](\d{1,2})[.-/](\d{1,2})
yyyy.aa.gg biçimindeki tarih bilgisi. $1 = yıl, $2 = ay, $3 = gün(?#year)(19|20)\d\d[- /.](?#month)(0[1-9]|1[012])[- /.](?#day)(0[1-9]|[12][0-9]|3[01])
Tarih formatının başka yazımı. Burada “(?#” ilebaşlayan bölüm açıklama yazmak üzere kullanılır ve açıklama metni “)” ile sonlanır.SELECT 'BT sorguda regexp BT' REGEXP '[[:<:]]BT.*BT[[:>:]]'
MySQL e özgü yazımla regexp kullanımı.\d{2}\s?[A-Z]{1,3}\s?\d{2,4}
Tr plaka tanımına uygun regexp gösterimi (özel plakalar hariç).
Extralar
[] : Karakter aralığını belirtir.
[a-z] : a ile z arası tek bir karakter
[A-Z] : a ile z arası tek bir karakter
[0-9] : 0 ile 9 arası bir rakam
[a-zA-Z0-9] : a ile z ya da A ile Z ya da 0 ile 9 arası bir karakter
[!@#$%^] : Herhangi bir ! ya da @ ya da # ya da $ ya da % ya da ^ karakteri
ONLİNE REGEX ARAÇLARI
Aşağıdaki faydalı kaynakları da inceleyip kurcalamanızı öneriyorum.
- regexlib.com
- Wikipedia
- regular-expressions.info
- 30 dakikalık Regex öğretisi
- Regex için 30 kullanışlı araç
- Php ile regex
- http://daringfireball.net/2010/07/improved_regex_for_matching_urls
Örnek Saat Kontrolü
$pattern= '/^([01][0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9]$/'; $content = '23:15:59'; if(preg_match($pattern, $content)) { echo 'Doğru bir saat girilmiş'; } else { echo 'Yanlış bir saat formatı girilmiş'; }
Bir sitenin başlığını çekmek
$pattern = '/<title>(.+)<\/title>/i'; $content = file_get_contents('http://phpstate.ulusanyazilim.com'); preg_match_all($pattern, $content, $results); print_r($results);
Url Yakalama Şablonu
$pattern = '(https?:\/\/(([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}\/?[^\b\s]+))'; $content = 'Bugün http://phpstate.ulusanyazilim.com çok daha güçlü'; $replace = '<a href="$0">$1</a>'; echo preg_replace($pattern, $replace, $content);
Örnek Hava Durumu
$content = file_get_contents('http://www.mgm.gov.tr/tahmin/il-ve-ilceler.aspx?m=ISTANBUL'); // Derece preg_match_all('/<em class="renkMin zemimeZ">(.+)C<\/em><\/td>/si', $content, $results); // İlk eşleşeni alıyoruz $degree = $results[1][0]; // Hava durumunun ikonu ve açıklaması preg_match_all('/"([\wÇŞİĞÜÖöçşğüı ]+)" rowspan="2"><img src="\.\.([\w\/\.-]+)"/si', $content, $results); $description = $results[1][0]; $image = 'http://www.mgm.gov.tr' . $results[2][0]; echo $degree . ' ' . $description; echo '<img src="' . $image . '" />';
İfade Grupları
$pattern = '/(?\w+@\w+(?:\.\w+)+)/i'; $content = 'Bir kaç adres: elma@manav.com, yarimkilo@kasap.com, ates@askeriye.com'; preg_match_all($pattern, $content, $results); print_r($results['email']);
Çıktısı
Array ( [0] => elma@manav.com [1] => yarimkilo@kasap.com [2] => ates@askeriye.com )