Sonra, giriş dizesi test etmek zorunda eşleşip eşleşmediğini görmek için düzenli ifadeye karşı. Bunu yapmak için koşullu bir yumruk kullanabilirsiniz: Bash olarak
if [[ $name =~ $re ]]; then
echo ${BASH_REMATCH[1]}
fi
, [[ ]]
uzatılmış koşul testi belirtin ve =~
bash düzenli ifade operatörü içerebilir.Bu durumda $name
giriş dizgisinin $re
düzenli ifadesine uyup uymadığını test ederiz. bunun nedeni normal ifadenin yapımına sonra maçı, yaparsa, biz (parantez ()
itibaren) bir submatch sahip olacağı garanti edilir ve biz BASH_REMATCH'de dizisi kullanarak erişebilirsiniz: ait
- Eleman 0 Bu dizi
${BASH_REMATCH[0]}
, düzenli ifade tarafından eşleştirilen tüm dize olacak, yani "http://www.google.com/".
- Bu dizinin sonraki öğeleri, alt eşlemelerin sonraki sonuçları olacaktır. Düzenli bir ifade içinde birden çok eşleşme
()
olabilir unutmayın - BASH_REMATCH
öğeleri sırayla bunlara karşılık gelecektir. Yani bu durumda ${BASH_REMATCH[1]}
, "www.google.com" ı içerecek ve bence istediğin dize.
BASH_REMATCH dizisinin içeriğinin yalnızca son kez =~
işlecinin kullanıldığı normal ifade için geçerli olduğuna dikkat edin. Yani daha düzenli ifade eşleşmeleri yapmaya devam ederseniz, bu diziden istediğiniz içeriği her seferinde kaydetmeniz gerekir.
Bu, uzun bir açıklama gibi görünebilir, ancak normal ifadelerin bazı inceliklerini gerçekten gizledim. Oldukça güçlü olabilirler ve iyi performansa inanıyorum ama normal ifade sözdizimi karmaşıktır. Ayrıca düzenli ifade uygulamaları farklıdır, bu yüzden farklı diller farklı özellikleri destekleyecektir ve sözdiziminde ince farklılıklar olabilir. Özellikle, düzenli bir ifadenin içinde karakterlerin kaçması, özellikle bu karakterlerin söz konusu dilde farklı bir anlamı olduğunda, dikenli bir konu olabilir. yerine ayrı bir satırda $re
değişkeni ayarlama ve durumda bu değişkenin atıfta yerine, durumuna doğrudan düzenli ifadeyi koyabilirsiniz
Not. Ancak, bash 3.2'da, bu tür düzenli normal ifadelerin etrafındaki tırnakların gerekip gerekmediğine ilişkin kurallar değiştirildi. Düzenli ifadeyi ayrı bir değişkene koymak, bunun etrafında basit bir yoldur, böylece koşul, =~
eşleme operatörünü destekleyen tüm bash sürümlerinde beklendiği gibi çalışır.
Büyük/küçük harf duyarlı olmayan bir eşleşme yapmanız veya başka bayraklar değiştirmeniz gerekiyorsa ne olur? –