2011-05-20 5 views
68

Soruma basit bir soru geliyor ve normal ifadeden kaçışla ilgili. Bir düzenli ifadede / eğik çizgi kaçmak zorunda mı? Ve bunu yapmaya nasıl devam edersiniz?Düzenli bir ifadede bir eğik çizgi kaçışı

+0

Hangi dil/düzenli ifade uygulaması kullanıyorsunuz? – Gumbo

+3

Regex için perl kullanıyorum – Zerobu

cevap

61

Hangi içeriğe/dileğe? Bazı diller, desen sınırlayıcısı olarak /'u kullanır, bu nedenle, hangi dil/içeriğe bağlı olarak, bundan kurtulmanız gerekir. Önünde bir ters eğik çizgi koyup kaçarsınız: \/ Bazı diller (PHP gibi) için sınırlayıcı olarak diğer karakterleri kullanabilir ve bundan kurtulmak zorunda kalmazsınız. Ancak her dilde AFAIK, /'un tek özel önemi, belirlenen desen sınırlayıcı olabilir.

+0

Noob sorusunu affet ama bu konudaki (tam olarak anladığım RegEx - Perl Regex ile ilgili) "desen sınırlayıcısı", bir (dizin) yol olarak yorumlanması gerektiği anlamına geliyor. Dosya adında bir harf karakteri yerine. Bu varsayımı düzelttim mi? Perl Best Practices için –

5

Eğer sınırlayıcı/ise, kaçmanız gerekecektir.

7

Eğer (maç için) mektup m ile preceed eğer ters eğik çizgi \ kullanın veya, yani m#.\d# yerine Perl" /.\d/ farklı bir ayırıcı seçebilirsiniz, neredeyse başka herhangi bir özel karakter/düzenli ifade sınırlayıcı değiştirebilir ;"

26

Perl'de alternatif sınırlayıcılar seçebilirsiniz. m// ile sınırlı değilsiniz. m{} gibi başka birini seçebilirsiniz. Sonra kaçmak gerekli değildir. Nitekim, "Perl Best Practices" daki Damian Conway, m{}'un kullanılması gereken tek alternatif sınırlayıcı olduğunu ve bunun Perl :: Critic (CPAN'da) tarafından güçlendirildiğini iddia etmektedir. Farklı sınırlayıcı karakterleri kullanarak uzaklaşırken, // ve {}, daha sonra deşifre edebilecek en açık gözüküyor. Ancak, bu seçimlerden herhangi biri çok fazla kaçışla sonuçlanırsa, hangisinin en iyi şekilde okunabilir olduğunu seçin. Yaygın örnekler m(...), m[...] ve m!...!'dur.

+1

+1 ve Perl :: Critic –

+1

Bir örnek verebilir misiniz? Bende şu var: 'perl -pi -e 's/chdir. */Chdir $ ROBOT_PATH/g" startup_scripts/supervisord.conf' Ve eğik çizgi ile çakışıyor. – CMCDragonkai

+0

Düzenli ifadelerle bir yer değiştirirken (s yerine) bir 's' kullandığınızı unutmayın. http://www.perlfect.com/articles/regex.shtml – Mashmagar