RegEx etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
RegEx etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

30 Mayıs 2019 Perşembe

Pattern Sınıfı

Giriş
Düzenli İfade (Regular Expression veya RegEx) için temel sınıftır.

compile metodu - string
Verilen düzenli ifadeyi bir nesne haline getirir.
Pattern pattern = Pattern.compile("...");
Gördüğüm örnekler
AlphaNumeric = [A-Za-z\\d]+
Numeric = \\d+
Spaces = [ \t]+
Date in DD-MM-YYY =([012]\\d|3[01])-(0\\d|1[012])-(\\d{4})
compile metodu - string + flag
Şöyle yaparız.
Pattern pattern =Pattern.compile("...", Pattern.CASE_INSENSITIVE);
asPredicate metodu
asPredicate metodu yazısına taşıdım

matcher metodu
Matcher döner. Girdi ile düzenli ifadeyi eşleştirir.
String line = "...";
Pattern pattern=Pattern.compile("...");
Matcher matcher=pattern.matcher(line);
splitAsStream metodu
splitAsStream metodu yazısına taşıdım

Diğer
1. Look Ahead ve Look Behind
Açıklaması şöyle.
(?<!\d)  # negative lookbehind to assert previous char is not a digit
\d{2}    # match exact 2 digits
:        # match a colon
\d{2}    # match exact 2 digits
(?!\d)   # negative lookahead to assert next char is not a digit
Negative Lookahead
Belirtilen şey ile başlamayan anlamına gelir.
Örnek
Şöyle yaparız. Burada amaç sayının başındaki 0 rakamlarını silmek. İlk capture group "-" veya boş string olabilir. Daha sonra bir veya daha fazla 0 gelebilir. Sonra negative lookahead ile 0'lardan sonra hemen string'in bitmediğini garanti ederiz. Tüm -000 şeklindeki karakterler - ile yer değiştirir. Tüm 000 şeklindeki karakterler "" yani boş string ile yer değiştirir.
"00000050.43".replaceFirst("^(-?)0+(?!$)", "$1")
Örnek
Şöyle yaparız. Bu / karakterine göre ayırır, ancak / karakterinin satır başında olmaması gerekir.
String[] res = "/token1/token2/token3".split("(?!^)/");
System.out.println(res[0]); // => /token1

17 Ocak 2019 Perşembe

RegEx Örnekleri

Negate
Genellikle iki string arasındaki şeyi yakalamak için kullanılır.
Örnek
Şöyle yaparız. "SUB" ile başlayıp ",-&succes" ile biten string'ler eşleşir. İki karakter arasındaki herşey yakalanır. Capture group içinde ([^,]*) şeklinde yazarak capture groupin bitiş karakteri verilir.
SUB([^,]*),-&succes
Şöyle yaparız.
String s = "SUB8&20.000,-&succes&09/12/18SUB12&100.000,-&failed&07/12/18SUB16&40.000
,-&succes&09/12/18";
Pattern p = Pattern.compile("SUB([^,]*),-&succes");
Matcher m = p.matcher(s);
while (m.find()) {
  System.out.println(m.group(1));
}
Çıktı olarak şunu alırız.
8&20.000
16&40.000
p - Character Classes
Punctiation karakterleri şunlar olabilir
! (ünlem), $(dolar)

Örnek
Şöyle yaparızall numeric (\\p{N}), letter (\\p{L}), punctuation (\\p{Punct}) anlamına gelir. ^ile tersi (negate) alınır. Böylece emojiler silinir.
String emotionless = aString.replaceAll("[^\\p{L}\\p{N}\\p{Punct}]","");
Bloklara Bölerek Capture Group
Şöyle yaparız. 5 defa 4 karakterlik grup ve bir defa da geri kalan herşeyin olduğu bir grup yaratılır.
str.replaceAll("(.{4})".repeat(5)+"(.*)","$1$2-$3-$4-$5-$6");}
WhiteSpace
Şöyle yaparız
Pattern whitespace = Pattern.compile("\\s");
Şöyle yaparız
Pattern whitespaces = Pattern.compile("\\s+");