Yanıtlar:
Normal ifadelerde nokta veya diğer karakterlerin özel bir anlamı olan normal bir karakter olmasını istiyorsanız, ters eğik çizgi ile bu karakterden kaçmanız gerekir. Java'daki normal ifadeler normal Java dizeleri olduğundan, ters eğik çizginin kendisinden kaçmanız gerekir, bu nedenle iki ters eğik çizgiye ihtiyacınız vardır;\\.
Diğer üyelerin önerdiği çözümler benim için işe yaramıyor.
Ama bunu buldum:
Java regexp yazma bir noktadan kaçmak için [.]
\\.
benim için iş vermedi: \.
yakındı .
, öncelenmelidir gerekmez \\.
buna olduğuna inandırmıştı \.
yerine .
, \\\.
ve bir hata attı oluşturucu, [.]
çalışan tek şeydi.
\\.
bir dizgi değişmezinin içinde \.
, normal ifadenin noktayı herhangi bir karakter eşleştiricisi yerine gerçek bir nokta olarak görmesi için gereken şey budur.
Perl tarzı düzenli ifadeler (Java regex motorunun az çok dayandığı) aşağıdaki karakterlere özel karakterler olarak davranır:
.^$|*+?()[{\
karakter sınıfları dışında özel bir anlamı var ,
]^-\
karakter sınıfları ( ) içinde özel bir anlamı vardır [...]
.
Bu nedenle, bağlama göre (veya karakter sınıfları söz konusu olduğunda, bunları yanlış yorumlanamayacakları konumlara yerleştirin) bu (ve yalnızca bu) sembollerden kaçmanız gerekir.
Gereksiz yere diğer karakterlerden kaçmak işe yarayabilir, ancak bazı regex motorları bunu sözdizimi hataları olarak ele alır, örneğin \_
.NET'te bir hataya neden olur.
Bazıları yanlış sonuçlara yol açacaktır, örneğin Perl'de \<
bir değişmez olarak yorumlanır <
, ancak egrep
"kelime sınırı" anlamına gelir.
Yazma Yani -?\d+\.\d+\$
maça 1.50$
, -2.00$
vb ve [(){}[\]]
parantez / parantez / parantez her türlü eşleşen bir karakter sınıfı için.
Bir kullanıcı giriş dizesini normal ifade için güvenli bir forma dönüştürmeniz gerekiyorsa, kullanın java.util.regex.Pattern.quote
.
Diğer yazılar: Jan Goyvaert'in kaçan metakarakterlerle ilgili RegexGuru blogu
Ters eğik çizgi ile özel karakterlerden kaçın. \.
, \*
, \+
, \\d
, Ve bu kadar. Emin değilseniz, özel olsun ya da olmasın alfabetik olmayan herhangi bir karakterden kaçabilirsiniz. Daha fazla bilgi için java.util.regex.Pattern için javadoc'a bakınız .
İşte doğrudan yapıştırmayı kopyalayabileceğiniz kod:
String imageName = "picture1.jpg";
String [] imageNameArray = imageName.split("\\.");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
Ve yanlışlıkla "." Dan önce veya sonra kalan boşluklar varsa. Bu gibi durumlarda? Bu alanları da düşünmek her zaman en iyi uygulamadır.
String imageName = "picture1 . jpg";
String [] imageNameArray = imageName.split("\\s*.\\s*");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
Burada, \\ s * boşlukları dikkate almak ve size sadece gerekli bölünmüş dizeleri vermek için var.
Ben ". *" İle biten bir dize eşleştirmek istedim Bunun için aşağıdakileri kullanmak zorunda kaldı:
"^.*\\.\\*$"
Bunu düşünürseniz aptalca: D Heres ne anlama geliyor. Dizenin başlangıcında sıfır veya daha fazla kez herhangi bir karakter ve ardından bir nokta "" olabilir. ardından dizenin sonunda bir yıldız (*) bulunur.
Umarım bu birisi için kullanışlı olur. Fabian'a ters eğik çizgi için teşekkürler.
"\\.\\*$"
. Sizin için önemli değilse dizenin başlangıcı için eşleşmeye gerek yoktur.
Cümlenizin ". " İle bitip bitmediğini kontrol etmek istiyorsanız , deseninizin sonuna [\. \ ] $ Eklemeniz gerekir.