Dize için normal ifade içerir mi?


114

Bir dizenin belirli bir kelime içerip içermediğini kontrol etmek için kullanılan normal ifade nedir (ör. 'Test')? Biraz googling yaptım ama böyle bir normal ifadenin doğrudan bir örneğini alamıyorum. Bu bir yapı betiği içindir, ancak herhangi bir programlama diliyle ilgisi yoktur.

Yanıtlar:


78

Normal PCRE tarzı normal ifade çeşitlerini varsayarsak:

Eğer bir bunu kontrol etmek istiyorsanız tek tam kelime , bu kadar \bTest\barzu ve programlama dili için sınırlayıcı eğer durum duyarsızlığı için uygun bayraklarıyla,. \b"kelime sınırını", yani bir kelimenin başlangıcı veya bitişi olarak kabul edilebilecek karakterler arasındaki bir noktayı temsil eder. Örneğin, sözcükleri ayırmak için boşluklar kullanıldığından, boşluğun her iki yanında bir sözcük sınırı olacaktır.

Kelimenin bir parçası olarak kontrol etmek istiyorsanız , sadece Testbüyük / küçük harf duyarlılığı için uygun bayraklarla. Genellikle, özel "alt dize" yöntemlerinin bu durumda daha hızlı olma eğiliminde olduğunu unutmayın, çünkü bu, normal ifadeyi ayrıştırmanın ek yükünü ortadan kaldırır.


1
" \bbir" kelime sınırını ", yani iki kelimeyi ayıran bir şeyi (örneğin bir boşluk) temsil eder." \bboşlukla eşleşmiyor; karakterler arasında (veya çoğu durumda bir satırın başında veya sonunda) eşleşen bir iddiadır .
strager

1
@strager: Evet, haklısınız - açıklamam biraz belirsizdi. Düzenleyeceğim.
Michael Madsen

117

Sadece deseninizi sabitlemeyin:

/Test/

Yukarıdaki normal ifade, içinde bir yerde bulunan "Test" değişmez dizesini kontrol edecektir.


2
Teşekkürler, bu kadar basit olduğunu bilmiyordum! Bunu Google'da kesinlikle görmedim. Örneğimi sabitleme derken neyi kastediyorsun?
GurdeepS

7
Bir dizgenin başlangıcı veya sonuyla eşleşecek bir deseni sabitleyebilirsiniz, örneğin / ^ Test / veya / Test $ / veya tam olarak eşleşecek şekilde / ^ Test $ /. Örnek saçmadır çünkü eşitlik için karşılaştırmaya göre hiçbir fayda sağlamaz, ancak örneğin form alanı doğrulaması yaparken / ^ \ d + $ / gibi bir normal ifade yalnızca alan en az bir rakam içeriyorsa ve sayısal rakamlardan başka hiçbir şey içermiyorsa eşleşecektir.
David Clarke

-13

Birkaç yıl geciktim ama neden bu olmasın?

[Tt][Ee][Ss][Tt]

4
Muhtemelen kodu açıklamamış olduğunuz için bu yanıt, düşük kaliteli inceleme kuyruğunda ortaya çıktı. Eğer bunu açıklarsanız (cevabınızda), daha fazla olumlu oy alma olasılığınız çok daha yüksektir - ve soru soran aslında bir şeyler öğrenir!
The Guy with The Hat

6
Bu çok genelleştirilemez - aramanız gereken kelimenin bir kullanıcıdan gelip gelmediğini hayal edin. [Aa]Her harf için bir kalıp oluşturmanız gerekir ve oldukça hızlı bir şekilde çirkinleşir.
Platinum Azure
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.