2010-04-16 28 views
12

sonu $ maçı bile eşleşti dizede \n sondaki fazladan var, bu yüzdenNe zaman bir normal ifadede A kullanmalıyım? hat çapanın

^\w+$abcd\n ama ^\w+\Z

Nasıl değil dize maç olacak Örneğin yerine $

arasında \Z kullanmak yaklaşık \A ve ne zaman kullanılır?

+0

Bunu yapmak istemiyorsunuz '^ \ w + \ z' (küçük harf z)? '\ Z' ve' $ 'aynıdır ('/ m' değiştiricisini kullanmıyorken). – cjm

+0

@cjm, python'da test ettim ve IMHO, aynı değil, '^ \ w + \ Z' abcd \ n' ile eşleşmiyor, ancak $ yapar, ancak python ve perl regex uygulamasının' \ Z olduğundan emin değilim 'farklıdır, fakat python' \ Z' ve '\ z' aynıdır, (sanırım python belgelerinde' \ z' görmüyorum), şu anda perl'm yok. – YOU

+0

@cjm, ben sadece codepad.org üzerinde test ettim, evet, python'da '\ Z', yani perl'de' \ z', her iki dilde de aynı olduklarını düşündüm. – YOU

cevap

20

Çoğu zaman çok satırlı eşleşmeleri etkinleştirirken kullanılır. \A yalnızca ENTIRE metninin başlangıcında eşleştiğinden, yalnızca bir satırın başlangıcında, satırlar arasında eşleşebilecek ifadelerde ^ ve \A işlevleri farklıdır.

+0

+1 teşekkürler, ama insanlar gerçekten kullanıyor? '/ M' kaldırılmıyor ve'^'kullanımı aynı davranıştır? – YOU

+0

Evet, kullanıyorum. Yeni satırların gömülmesini beklediğiniz bir diziyi aramaya çalışmayı düşünün, ancak bir kullanıcı bunları içeri koydu. Tüm dizgeyi arayabileceğinizi umuyoruz ancak^ve $ şaşkın olsun ve sadece dizenin ilk bölümünü tarayın . Bir kötülük kodunu bir sorguya enjekte edebilir veya bir veritabanında saklayabilirsiniz. Evet, kafa karıştırıcı ama \ m, \ A, \ z,^ve $ kullanımları var, bu yüzden onları ne zaman ve nerede kullanacağınızı anlamanız gerekiyor. Belki de bu iyi bir örnek değil, ama gerçekten önemli olabilir. Belki birisi bazı gerçek dünya örnekleri ekleyebilir. –

+0

Bir dizi günlük içinde bir günlük dosyasının başında belirli bir çift satırı eşleştirmeye çalışıyorsanız, çok satırlı eşleşmeye sahip olmanız gerekir, ancak sadece '^' kullanamazsınız (çünkü, logfile başlangıcındaki satırları eşleştirmek istiyorsanız, ortada değil). Bu potansiyel kullanım durumu olurdu. – Amber

4

Herhangi bir regex özelliğiyle olduğu gibi, daha genel bir özellikten farklı olarak neye ihtiyacınız olduğunu tam olarak açıkladığında kullanabilirsiniz. Tam olarak bir dizenin başlangıcında (mantıksal çizgiler yerine) eşleştirmek istediğinizi biliyorsanız, bunu açıklayan regex özelliğini kullanın. İstemediğiniz durumlarda eşleşebilecek regex özelliklerini kullanmayın. (Ruby) kullandığınız etiketlere göre sorunuza

\b Match a word boundary 
\B Match except at a word boundary 
\A Match only at beginning of string 
\Z Match only at end of string, or before newline at the end 
\z Match only at end of string 
\G Match only at pos() (e.g. at the end-of-match position 
    of prior m//g) 
2

doğrudan alakalı değil, ama en az bir dil vardır: Perl için

, sıfır genişlikli iddialar hakkında ayrıntılar için perlre dokümanlar bakın ^ ve $hep Eğer \A ve \Z veya \z kullanmak başlangıç ​​/ son-of-string Eğer var eşleştirmek istiyorsanız, böylece,/son-of-line başlatmak anlamına nerede.

Eğer taşınabilir senin Regexes tutmak istiyorsanız

, açıkça bunları yerine vb \m veya Regex.MULTILINE Öte yandan

, JavaScript gibi mod değiştiricilerinin kullanılabilirliği güvenmek ne yapmak istediğinizi belirtmek iyi bir uygulamadır , POSIX ve XML, \A ve \Z'u desteklemez. Bu, RegexBuddy gibi araçların kullanışlı olup, burada normal ifadeleri bir aromadan diğerine dönüştürür.

+0

ruby ​​regex, +1 – YOU

2

Eğer desteklerle \A çalışıyoruz regex lezzet o zaman hep yerine ^ arasında kullanmak öneriyoruz. \A her zaman dizenin başında yalnızca onu destekleyen tüm tatlarda eşleşir. Hat kesintileriyle ilgili bir sorun yok.

^ yalnızca dizenin başlangıcında veya normal ifadeye ve normal ifade seçeneklerine bağlı olarak herhangi bir satırın başlangıcında eşleşebilir.

\A'u kullanarak, başka birinin kodunuzu sürdürmesi gerektiğinde karışıklık olasılığını azaltırsınız.

+0

hakkında bilgi için teşekkürler Teşekkürler Jan Goyvaerts için teşekkürler, thats mantıklı – YOU

İlgili konular