Yanıtlar:
Köşeli parantezler karakter sınıfına yöneliktir ve aslında herhangi biriyle eşleşmesi için çalışıyoruz: s
, |
, s
(tekrar), e
, a
, s
(tekrar), o
ve n
.
Gruplama için bunun yerine parantez kullanın:
(s|season)
veya yakalamayan grup:
(?:s|season)
Not: Yakalamayan gruplar motora eşleşmeyi saklamasına gerek olmadığını söylerken, diğeri (yakalama grubu yapar). Küçük şeyler için, ya işe yarıyor, ya da 'ağır hizmet' için, eşleşmeye ihtiyacınız olup olmadığını ilk önce görmek isteyebilirsiniz. Yapmazsanız, asla kullanmanız gerekmeyecek bir şeyi depolamak yerine hesaplama için daha fazla bellek ayırmak için yakalama olmayan grubu kullanın.
?:
İçinde aka gruplama non-capturing
sadece eşleşti ile ifadeler kullanmak olamayacağını söylüyor $1
, $2
vb ... Eğer bir ifade eşleşti olmadığını, ne ihtiyaç vardır istiyorum ^
.
(?! ... )
insead kullanacaksınız (?!s|season)
.
Bu canlı örnekten alınan yukarıdaki ekran görüntüsü: https://regex101.com/r/cU5lC2/1
Ben kullanarak olacak phpsh interaktif kabuk üzerinde Ubuntu 12.10 göstermek için PCRE regex motoru olarak bilinen yöntemle preg_match
Phpsh'yi başlatın, bir değişkene biraz içerik koyun, kelime ile eşleştirin.
el@apollo:~/foo$ phpsh
php> $content1 = 'badger'
php> $content2 = '1234'
php> $content3 = '$%^&'
php> echo preg_match('(\w+)', $content1);
1
php> echo preg_match('(\w+)', $content2);
1
php> echo preg_match('(\w+)', $content3);
0
Preg_match yöntemi değişkenleri analiz etmek PHP dili içinde PCRE motorunu kullandı: $content1
, $content2
ve $content3
ile (\w)+
desen.
$ içerik1 ve $ içerik2 en az bir kelime içerir, $ içerik3 içermez.
el@apollo:~/foo$ phpsh
php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';
php> echo preg_match('(dart|fart)', $gun1);
1
php> echo preg_match('(dart|fart)', $gun2);
1
php> echo preg_match('(dart|fart)', $gun3);
1
php> echo preg_match('(dart|fart)', $gun4);
0
Değişkenler gun1
ve gun2
dizeyi içeren dart
veya fart
doğru olan, ancak gun3 içeriyor darty
ve hala eşleşiyor, sorun bu. Bir sonraki örneğe bakalım.
Kelime Sınırları zorla eşleştirilebilir \b
, bakınız:
Edinilen Görsel Görüntü Regex http://jex.im/regulex ve https://github.com/JexCheng/regulex Örnek:
el@apollo:~/foo$ phpsh
php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';
php> echo preg_match('(\bdart\b|\bfart\b)', $gun1);
1
php> echo preg_match('(\bdart\b|\bfart\b)', $gun2);
1
php> echo preg_match('(\bdart\b|\bfart\b)', $gun3);
0
php> echo preg_match('(\bdart\b|\bfart\b)', $gun4);
0
\b
Emin "dart" yapma, bir kelime sınıra sahip eşleşti, ancak "darty" olmadığını iddia eder.
Örnekleri js'de test ediyorum. En basit çözüm - sadece ihtiyacınız olan kelimeyi ekleyin / /:
var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result
Şimdi bu belirli kelimeye sınırları olan ihtiyacınız varsa, başka işaret harflerinin içinde değil. Biz kullanmak b işaretleyici:
var reg = /\bcat\b/
reg.test('acatb');//1 test
false // result
reg.test('have cat here');//2 test
true // result
Ayrıca js'de nesne-sonuç döndüren exec () yöntemimiz var. Fg'nin sözümüzün yeri / dizini hakkında bilgi almasına yardımcı olur.
var matchResult = /\bcat\b/.exec("good cat good");
console.log(matchResult.index); // 5
Tüm eşleşen kelimeleri dizge / cümle / metin olarak almamız gerekirse, g değiştiriciyi kullanabiliriz (genel eşleme):
"cat good cat good cat".match(/\bcat\b/g).length
// 3
Şimdi sonuncusu - belirli bir kelimeye ihtiyacım yok, bazılarına ihtiyacım var. Kullanıyoruz | işareti, seçim anlamına gelir / veya.
"bad dog bad".match(/\bcat|dog\b/g).length
// 1
[ ]
bir karakter sınıfını tanımlar. Yani orada ayarladığınız her karakter eşleşecek. veya veya [012]
eşleşecek ve aynı şekilde davranacak.0
1
2
[0-2]
İstediğiniz şey, bir veya ifadesini tanımlamak için gruplamalardır. Sorunuz (s|season)
için kullanın .
Btw. dikkat etmelisin. Normal regex'teki (veya bir gruplamanın içindeki) meta karakterler, karakter sınıfından farklıdır. Bir karakter sınıfı, bir alt dil gibidir. [$A]
sadece eşleşecek $
veya A
başka hiçbir şey olmayacak. Dolar için buradan kaçmak yok.
(season|s)
Bunun yerine kullanın .[season]
herhangi biriyle eşleşirs
,e
,a
,o
,n
.