2016-04-05 64 views
1

Bu regex ^([^i]|i(?!s OK))+\.$'u aşağıdaki 2 satırda denedim.Negatif bakışta hata oluştu

1. /tmp/tmp.oW75zGUh4S ... is O. 

2. /tmp/tmp.oW75zGUh4S ... is OK. 

Bu normal ifadenin birinciyle eşleşmesini beklerim, ancak ikinci değil. Yine de hiçbiri ile uyuşmuyor. Niye ya?

Eğer pozitif bakış ^([^i]|i(?=s OK))+\.$ kullanırsam, o zaman ikincisiyle eşleşir ve beklenen davranış budur.

+0

Eşleme kuralı nedir? –

+1

Burada çalışır. Ama daha çok istediğiniz gibi görünüyor. * (? Wrikken

+0

Örnek: https://regex101.com/r/vA6tY8/1 – Wrikken

cevap

0

regex101.com sitesinde test ettikten sonra, \n'un eksik olduğunu tespit ettim. Doğru ifade, ^([^i\n]|i(?!s OK))+$.

Teşekkürler Wrikken.

Güncelleştirme: Yalnızca neden \n eksik olduğunu açıklamak için. ^(...)+$ açgözlüdür, yani yapamayacağı tüm karakterleri yiyip bitirir ve [^i] bir i olmayan bir karakteri, hatta bir satır sonu karakteri bile yiyecektir. Ayrıca, $'un maçın bitiş çizgisiyle bitmesi gerektiği anlamına geldiği için yanlış tahmin ettiğim için maçın bitiş çizgisini geçerek . numaranı geçmesini önlemek mümkün değildi. Doğru bayrağı ayarlayarak hat sonu sınırı. $, tüm dizenin sonu anlamına gelebilir, ancak bunu önlemek için bir bayrak kullanmıştım.