2011-06-26 25 views
6

"int" sözcüğünü yalnızca bir dizenin parçası değilse bulmaya çalışan normal bir ifade oluşturmam gerekiyor.Bir regex oluşturulmasına yardımcı olun

Kodda int'nin kullanılıp kullanılmadığını bulmak istiyorum. (Bazı dizede, yalnızca normal kodunda)

Örnek:

int i; // the regex should find this one. 
String example = "int i"; // the regex should ignore this line. 
logger.i("int"); // the regex should ignore this line. 
logger.i("int") + int.toString(); // the regex should find this one (because of the second int) 

teşekkürler!

+0

Regex Java'da çalışmalı mı yoksa ifadeyi Java koduna mı uyguluyorsunuz? –

+0

Sadece checkStyle için ihtiyacınız var – Adibe7

+0

Bu durumda programın GRAMMAR'sını kontrol etmek için dosya ayrıştırması gerekiyor mu? Bu durumda 'String' jetonu ile başlatılmış ve ';' ile bittiğinde int – Kamahire

cevap

4
Değil

Bu kurşun geçirmez olmayacak, ancak bu tüm test kasanız için işe yarıyor es:

String regex = "(?<=^([^\"]*|[^\"]*\"[^\"]*\"[^\"]*))\\bint\\b(?=([^\"]*|[^\"]*\"[^\"]*\"[^\"]*)$)"; 
    System.out.println(regex); 
    String[] tests = new String[] { 
      "int i;", 
      "String example = \"int i\";", 
      "logger.i(\"int\");", 
      "logger.i(\"int\") + int.toString();" }; 

    for (String test : tests) { 
     System.out.println(test.matches("^.*" + regex + ".*$") + ": " + test); 
    } 

:

(?<=^([^"]*|[^"]*"[^"]*"[^"]*))\bint\b(?=([^"]*|[^"]*"[^"]*"[^"]*)$) 

O arkasında bir göz yapar ve orada ya hiçbiri ya da iki/önceki Aşağıdaki alıntılar İşte

" iddia ileriye bakmak çıkışı ile java kod Çıktı (regex dahil, tüm bu \ kaçışları olmadan okuyabiliyorsunuz):

(?<=^([^"]*|[^"]*"[^"]*"[^"]*))\bint\b(?=([^"]*|[^"]*"[^"]*"[^"]*)$) 
true: int i; 
false: String example = "int i"; 
false: logger.i("int"); 
true: logger.i("int") + int.toString(); 

Bir regex kullanmak asla% 100 doğru olmaz - bir dil çözümleyicisine ihtiyacınız vardır.

(^int|[\(\ \;,]int) 

Sen o int bulmak için kullanabilirsiniz:

0

komple gereksinimleri tam olarak emin ama belki her satırı olacaktır girişi varsayarsak

0

$\s*\bint\b 

,

^int\s[\$_a-bA-B\;]*$ 

aşağıda belirtildiği temel değişken isimlendirme kuralları :)

0

kodu ayrıştırmak ve izole int sözcüğü aramak düşünüyorsanız, bu işleri vb /* foo " bar */ yorumlar sıralı, Strings "foo\"bar" kaçan tırnak düşünün kod sadece boşlukla olabilir, virgül, ";" ve sol parantez veya satırın ilk kelimesi olsun.

Burada denemek ve ona http://www.regextester.com/

PS artırabilir: Bu tüm test durumlarda çalışır.

0

$ [^ "] * \ binti \

çalışması gerekir b. Sana karakterden sonra geçerli bir int tanıtıcı kullanabileceği bir durum düşünemiyorum ''". Elbette, bu sadece kod satır başına bir ifade ile sınırlıysa geçerlidir.

İlgili konular