2011-01-18 17 views
7

Ben alt dize DEF içeren tüm kelimeleri kontrol etmek istiyorsanız, bu doğru bir yaklaşım olacaktır: yani Regexes negating değiştirirkenKontrol

^.*[D][E][F].*$ 

Ayrıca kolay bir kural var Yukarıdakileri içermeyen dizeleri tanımlamak için DEF

DÜZENLEME: Bu normal ifadeler gerektirmediğini biliyorum, ancak benim amaçlarım için.

cevap

18

Bu da çalışır:

^.*DEF.*$ 

Kontrol edildi, bütün Dize en az bir kez alt dizeyi "DEF" içerir eğer. Ancak, aşağıdaki gibi önemsiz ifadeler için de

aynı şeyi yapar.

+0

kullanarak java dışında demek istiyorum^ve –

+0

@LouisRhys, 'için $^'ve' $ 'sırasıyla dizenin başlangıcı ve bitişi anlamına gelir. Eğer java 'String.matches (String) 'kullanıyorsanız, bunları kullanmanıza gerek yoktur, çünkü bu yöntem yalnızca normal ifade * tüm * giriş dizgisiyle eşleşiyorsa true değerini döndürür. – Czechnology

9

Neden sadece str.contains("DEF") ve !str.contains("DEF") kullanıyorsunuz?

+2

+1: regex gerek yok :) – LaGrandMere

+0

Nasıl çalıştığını anlamak için olsa bilmek isterim. – dr85

+0

İçerisinde bulunan inside() yöntemi, dizgede baytları D, E ve F'nin bir oluşumuna göre sırayla inceler, bunu kaba bir kuvvet araması olarak düşünebilirsiniz. Örneğin. 100 karakterlik bir dizi, bu sıra için ~ 97 defaya kadar "kontrol" edilir. Düzenli ifadeler çok, çok farklı bir hayvandır. – Brian

0

Regexp'iniz olarak DEF'u kullanabilirsiniz. İçermeyen dizeleri tanımlamak için, yukarıdaki ifadeyle uyuşmayan dizeleri döndürmeniz yeterlidir.

+0

Belirli bir alt dizeyi içermeyen tüm kelimeleri regex kullanarak nasıl tanımlarsınız – dr85

+0

I dedi, ben sadece sonucu reddederdim, yani "string.matches" ("DEF"); – biziclop

+0

ama sadece bir regex – dr85