Java Normal İfadeleri
Normal İfade nedir?
Normal ifade, bir arama kalıbı oluşturan bir dizi karakterdir. Bir metinde veri aradığınızda, aradığınız şeyi açıklamak için bu arama modelini kullanabilirsiniz.
Normal ifade, tek bir karakter veya daha karmaşık bir kalıp olabilir.
Normal ifadeler, her tür metin arama ve metin değiştirme işlemlerini gerçekleştirmek için kullanılabilir.
Java'nın yerleşik bir Normal İfade sınıfı yoktur, ancak java.util.regex
paketi normal ifadelerle çalışacak şekilde içe aktarabiliriz. Paket aşağıdaki sınıfları içerir:
Pattern
Sınıf - Bir kalıp tanımlar (aramada kullanılacak)Matcher
Sınıf - Kalıbı aramak için kullanılırPatternSyntaxException
Sınıf - Normal ifade modelinde sözdizimi hatasını gösterir
Örnek
Bir cümlede "w3schools" kelimesinin herhangi bir tekrarı olup olmadığını öğrenin:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Visit W3Schools!");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
}
}
// Outputs Match found
Örnek Açıklama
Bu örnekte, "w3schools" kelimesi bir cümle içinde aranmaktadır.
Pattern.compile()
İlk olarak, yöntem kullanılarak desen oluşturulur . İlk parametre, hangi kalıbın arandığını belirtir ve ikinci parametrede, aramanın büyük/küçük harfe duyarlı olmaması gerektiğini belirten bir bayrak bulunur. İkinci parametre isteğe bağlıdır.
Yöntem matcher()
, bir dizgedeki deseni aramak için kullanılır. Gerçekleştirilen arama hakkında bilgi içeren bir Matcher nesnesi döndürür.
Yöntem find()
, dizgede desen bulunursa true, bulunamadıysa false döndürür.
Bayraklar
Yöntemdeki bayraklar compile()
, aramanın nasıl yapıldığını değiştirir. İşte bunlardan birkaçı:
Pattern.CASE_INSENSITIVE
- Bir arama yapılırken harfler göz ardı edilecektir.Pattern.LITERAL
- Desendeki özel karakterlerin özel bir anlamı olmayacak ve arama yapılırken sıradan karakterler olarak kabul edilecektir.Pattern.UNICODE_CASE
CASE_INSENSITIVE
- İngiliz alfabesinin dışındaki harfleri de görmezden gelmek için bayrakla birlikte kullanın
Normal İfade Kalıpları
Yöntemin ilk parametresi Pattern.compile()
kalıptır. Ne arandığını açıklar.
Parantezler bir dizi karakter bulmak için kullanılır:
Expression | Description |
---|---|
[abc] | Find one character from the options between the brackets |
[^abc] | Find one character NOT between the brackets |
[0-9] | Find one character from the range 0 to 9 |
meta karakterler
Meta karakterler, özel bir anlamı olan karakterlerdir:
Metacharacter | Description |
---|---|
| | Find a match for any one of the patterns separated by | as in: cat|dog|fish |
. | Find just one instance of any character |
^ | Finds a match as the beginning of a string as in: ^Hello |
$ | Finds a match at the end of the string as in: World$ |
\d | Find a digit |
\s | Find a whitespace character |
\b | Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b |
\uxxxx | Find the Unicode character specified by the hexadecimal number xxxx |
niceleyiciler
Niceleyiciler miktarları tanımlar:
Quantifier | Description |
---|---|
n+ | Matches any string that contains at least one n |
n* | Matches any string that contains zero or more occurrences of n |
n? | Matches any string that contains zero or one occurrences of n |
n{x} | Matches any string that contains a sequence of X n's |
n{x,y} | Matches any string that contains a sequence of X to Y n's |
n{x,} | Matches any string that contains a sequence of at least X n's |
Not: İfadenizin özel karakterlerden birini araması gerekiyorsa, onlardan kaçmak için ters eğik çizgi ( \ ) kullanabilirsiniz. Java'da, dizelerdeki ters eğik çizgilerin kendilerinin kaçması gerekir, bu nedenle özel karakterlerden kaçmak için iki ters eğik çizgi gerekir. Örneğin, bir veya daha fazla soru işareti aramak için şu ifadeyi kullanabilirsiniz: "\\?"