2015-08-05 17 views
6

Tam sözcük nasıl eşleştirilir herhangi bir özel karakter içerir?Herhangi bir karakterle tam olarak eşleşmeyi regex ile eşleştir

$string = 'Fall in love with #PepsiMoji! Celebrate #WorldEmojiDay by downloading our keyboard @ http://bit.ly/pepsiKB & take your text game up a notch. - teacher'; 

preg_match("/\b#worldemojiday\b/i",$string); //false 

Herhangi bir karakter içeren kelimeyi tam olarak eşleştirmek istiyorum. Bu dizede kelime 'indirme' eşleştirmek istiyorsanız, gibi, O

preg_match("/\bdownload\b/i",$string); //false 

Ama indirirken aradığında Doğru dönmelidir return false olmalıdır.

Teşekkür

cevap

3

sorun # olmayan kelime karakterden önce \b kelime sınırıyla olduğunu. \b, 2 kelime olmayan (veya 2 kelime arasında) karakter arasındaki konumu eşleştiremez, böylece eşleşme olmaz.

bir çözelti ya da bunun yerine ilk \b kaldırmak, ya da (2 kelime ya da 2 sözcük olmayan karakter arasında bir kelime dışı sınır eşlemesi) \B kullanmaktır.

\B#worldemojiday\b 

Ya

#worldemojiday\b 

demo (veya this one) \B da bir dize başında eşleştiğini

Not bakınız. İşte

kelime sınırlarını ekleyerek, dinamik bir regex inşa etmek a way sadece gerektiğinde:

$srch = "žvolen"; 
$srch = preg_quote($srch); 
if (preg_match('/\w$/u', $srch)) { 
    $srch .= '\\b'; 
} 

if (preg_match('/^\w/u', $srch)) { 
    $srch = '\\b' . $srch; 
} 
echo preg_match("/" . $srch . "/ui", "žvolen is used."); 
+0

Bu regex'teki sorun, eşleşmenin eşleşmediğini bulmaya çalıştığım zamandır. Sözcük sınırıyla tam bir kelime bulabilen bir şey istiyorum. –

+1

Normal ifadeyi dinamik olarak oluşturuyorsanız, arama dizesinin ilk ve son karakterlerini denetlemeniz gerekir. Karakter bir kelime karakteriyse, '\ b' ekleyin. Değilse, '\ B' veya hiçbir şey ekleyin. Lütfen gerçek kodunuzu gönderin. –

+0

Mükemmel çalışır +1 ... –

1

Ne lookarounds kullanma hakkında:

(?<!\w)#WorldEmojiDay(?!\w) 

Bu, hiçbir kelime karakter önce var ki, garanti veya dizgeden sonra. Bkz. test at regex101

+0

Bu da çalıştı. –

+0

Aradığım tam cevap bu. –

+0

, regexr.com sitesinde denendi ancak hata verdi. sadece ekle '!' 'sonra? '(?

İlgili konular