Satır eşleştirmek için düzenli ifade etmiyor't bir kelime içeriyor?
Olası bir kelime maç ve diğer araçlar (örneğin grep -v
) kullanarak maçlar ters olduğunu biliyorum. Ancak, mümkünse hatları bu maç için olup olmadığını bilmek istiyorumyokbelirli bir kelime (örn: hede) normal bir ifade kullanarak içerir?
Giriş:
hoho
hihi
haha
hede
# grep "Regex for do not contain hede" Input
Çıkış:
hoho
hihi
haha
CEVAP
Bu düzenli ifade ters eşleme desteklemiyor fikri tamamen doğru değil. Olumsuz bak-alternatif yollarını kullanarak bu davranışı taklit edebilir:
^((?!hede).)*$
Normal ifade üzerinde herhangi bir dize ya da bir satır sonu satır, maç olacakdeğil(alt) dizesini içeren''. hede Belirtildiği gibi, bu bir şey değil düzenli ifade "" (veya yapmalı), ama yine de . iyi ^em>mümkün.
Ve eğer çizgi maç için gerekirse karakter olarak iyi bir iş, DOT-ALL modifier (aşağıdaki desen s
firar):
/^((?!hede).)*$/s
yoksa satır içi kullanın:
/(?s)^((?!hede).)*$/
(/.../
nerede normal ifade sınırlayıcıları, yani desenin bir parçası değil)
Eğer NOKTA-değiştirici kullanılabilir durumda değilse, karakter sınıfı ile aynı davranışı [\s\S]
taklit:
/^((?!hede)[\s\S])*$/
Açıklama
Bir dize n
karakter sadece bir listesidir. Önce ve her karakter sonra, boş bir dize var. n
karakter listesi n 1
boş dizeleri olacaktır. Dize "ABhedeCD"
düşünün:
-- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- --
S = |e1| A |e2| B |e3| h |e4| e |e5| d |e6| e |e7| C |e8| D |e9|
-- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- --
index 0 1 2 3 4 5 6 7
nerede e
'boş dizeleri. Normal ifade (?!hede).
önde görünüyor, eğer yok alt "hede"
görünmek, ve eğer bu durumda (çok başka bir şey görmedim), .
(nokta) herhangi bir karakter dışında bir satır sonu. Bak alternatif yollarını da denirsıfır genişlik-iddialaronlar yok çünkütüketmekherhangi bir karakter. Onlar sadece bir şeyi doğrulamak/iddia.
Yani, benim örnekte, her boş dize ilk eğer bir karakter .
(nokta) tarafından tüketilen önce 27 ** ileride, eğer orada görmek için doğrulanır. (?!hede).
bunu sadece bir kez yapacaksınız, bir grup olarak sarılır ve sıfır veya daha çok kez tekrarlanan bu yüzden düzenli ifade: ((?!hede).)*
. Son olarak, başlangıç ve son giriş tüm giriş tüketilen emin olun bağlantılı: ^((?!hede).)*$
Gördüğünüz gibi, giriş "ABhedeCD"
e3
, (?!hede)
başarısız normal ifade, çünkü başarısız olacaktır"hede"
ileride!).
Düzenli ifade bir e-posta adresi doğru...
Telefon numarası için kapsamlı bir düz...
Nasıl Düzenli İfade, JavaScript için b...
Eğer bir dize geçerli bir adres olup o...
Kaddafi aramak için düzenli ifade...