Aşağıdakiler eşleştirilmelidir:
AAA123
ABCDEFGH123
XXXX123
Yapabileceğim: ".*123"
?
Aşağıdakiler eşleştirilmelidir:
AAA123
ABCDEFGH123
XXXX123
Yapabileceğim: ".*123"
?
Yanıtlar:
Evet yapabilirsin. Bu işe yaramalı.
.
= herhangi bir karakter\.
= gerçek nokta karakteri.?
= .{0,1}
= sıfır veya bir kez eşleştir.*
= .{0,}
= sıfır veya daha fazla karakterle eşleş.+
= .{1,}
= herhangi bir karakterle bir veya daha fazla kez eşleşEvet, işe yarayacaktır, ancak ifadeyi derlerken DOTALL bayrağını .
geçmediğiniz sürece yeni satırlarla eşleşmeyeceğini unutmayın :
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
.
satırlarla eşleşeceğini varsaydım . Cevabınızı okuduğuma sevindim, bunu kullanmam gerek!
{.,\n,\r,\u2028,\u2029,\u0085}
kesinlikle herhangi bir karakteri eşleştirmek için kullanmanız gerekebilir (Unicode karakterleri, .
Java ile eşleşmeyen ek satır sonlandırma karakteridir ), ancak {.,\n,\r}
çoğu metin dosyası için çalışır.
[\s\S]
, DOTALL kullanamıyorsanız herhangi bir karakteri eşleştirmenin popüler bir yoludur.
(?:.|\\v)*
çünkü, JDK-6337993 .
Çok sayıda karmaşık normal ifade testi ve geliştirme aracı vardır, ancak Java'da basit bir test koşum takımı istiyorsanız, burada oynamak için bir tane var:
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
Artık kolayca yeni testcasları ekleyebilir ve yeni desenler deneyebilirsiniz. Normal regex keşfetmek eğlenin.
Hayır, *
sıfır veya daha fazla karakterle eşleşir. Kullanmalısın+
yerine bir ya da daha fazlasıyla eşleşen kullanmalısınız.
Bu ifade sizin için daha iyi olabilir: [A-Z]+123
Bunu kodlamak için gördüğüm en yaygın yolu, üyeleri olası tüm karakter kümesinin bir bölümünü oluşturan bir karakter sınıfı ile.
Genellikle insanların yazmasını bu kadar [\s\S]
olsa (boşluk ya da olmayan boşluk), [\w\W]
, [\d\D]
vb tüm çalışma olur.
.*
ve.+
yeni satırlar hariç herhangi bir karakter içindir.
Yeni satırlar eklemek istemeniz durumunda, Java veya C ++ gibi çift çıkış gerektiren bu diller için aşağıdaki ifadeler de kullanılabilir:
[\\s\\S]*
[\\d\\D]*
[\\w\\W]*
sıfır veya daha fazla kez, veya
[\\s\\S]+
[\\d\\D]+
[\\w\\W]+
bir veya daha fazla kez.
C #, PHP, Ruby, PERL, Python, JavaScript gibi bazı diller için çift çıkış gerekli değildir:
[\s\S]*
[\d\D]*
[\w\W]*
[\s\S]+
[\d\D]+
[\w\W]+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex_1 = "[\\s\\S]*";
final String regex_2 = "[\\d\\D]*";
final String regex_3 = "[\\w\\W]*";
final String string = "AAA123\n\t"
+ "ABCDEFGH123\n\t"
+ "XXXX123\n\t";
final Pattern pattern_1 = Pattern.compile(regex_1);
final Pattern pattern_2 = Pattern.compile(regex_2);
final Pattern pattern_3 = Pattern.compile(regex_3);
final Matcher matcher_1 = pattern_1.matcher(string);
final Matcher matcher_2 = pattern_2.matcher(string);
final Matcher matcher_3 = pattern_3.matcher(string);
if (matcher_1.find()) {
System.out.println("Full Match for Expression 1: " + matcher_1.group(0));
}
if (matcher_2.find()) {
System.out.println("Full Match for Expression 2: " + matcher_2.group(0));
}
if (matcher_3.find()) {
System.out.println("Full Match for Expression 3: " + matcher_3.group(0));
}
}
}
Full Match for Expression 1: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 2: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 3: AAA123
ABCDEFGH123
XXXX123
İfadeyi keşfetmek istiyorsanız, regex101.com'un sağ üst panelinde açıklanmıştır . İsterseniz, bu bağlantıda bazı örnek girişlerle nasıl eşleşeceğini de izleyebilirsiniz .
jex.im düzenli ifadeleri görselleştirir:
(\W|\w)*
çift kaçan yerine seviyorum
Örnek problem için özel çözüm: -
Deneyin [A-Z]*123$
maç olacak 123
, AAA123
, ASDFRRF123
. Eğer daha önce en az bir karakter ihtiyaç 123
kullanım [A-Z]+123$
.
Sorunun Genel Çözümü (Normal ifadede "herhangi bir karakter" nasıl eşleştirilir):
[\w|\W]{min_char_to_match,}
.[\S]{min_char_to_match,}
.[^]
newline dahil herhangi bir karakterle eşleşmelidir. [^
CHARS]
olanlar dışındaki tüm karakterleri ile eşleşen KRKTR'lerin . Eğer KRKTR'lerin boş, hepsi karakterle eşleşir.
JavaScript örneği:
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
Normal ifadeyi deneyin .{3,}
. Bu, yeni bir satır dışındaki tüm karakterlerle eşleşir.
Ben her zaman değil nokta herhangi bir karakter anlamına gelir. Tek satır modunda istisna. \p{all}
olmalı
String value = "|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";
String expression = "[a-zA-Z0-9\\p{all}]{0,50}";
if(value.matches(expression)){
System.out.println("true");
} else {
System.out.println("false");
}