Yang berikut harus dicocokkan:
AAA123
ABCDEFGH123
XXXX123
dapat saya lakukan ".*123"
:?
Yang berikut harus dicocokkan:
AAA123
ABCDEFGH123
XXXX123
dapat saya lakukan ".*123"
:?
Jawaban:
Ya kamu bisa. Itu seharusnya bekerja.
.
= char apa saja\.
= karakter titik yang sebenarnya.?
= .{0,1}
= cocok dengan char nol atau satu kali.*
= .{0,}
= cocok dengan karakter nol atau lebih banyak kali.+
= .{1,}
= cocok dengan karakter apa saja satu kali atau lebihYa itu akan berfungsi, meskipun perhatikan bahwa .
tidak akan cocok dengan baris baru kecuali Anda melewati flag DOTALL saat mengkompilasi ekspresi:
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
.
akan cocok dengan baris baru. Saya senang saya membaca jawaban Anda, saya harus menggunakannya!
{.,\n,\r,\u2028,\u2029,\u0085}
untuk benar-benar mencocokkan semua karakter (karakter Unicode adalah karakter penghentian baris tambahan yang ditambahkan tidak cocok dengan .
di Jawa), tetapi hanya {.,\n,\r}
akan berfungsi untuk sebagian besar file teks.
[\s\S]
adalah cara populer untuk mencocokkan karakter apa pun jika Anda tidak dapat menggunakan DOTALL.
(?:.|\\v)*
, karena JDK-6337993 .
Ada banyak pengujian regex canggih dan alat pengembangan, tetapi jika Anda hanya ingin memanfaatkan uji sederhana di Jawa, berikut ini satu untuk Anda mainkan:
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
Sekarang Anda dapat dengan mudah menambahkan testcases baru dan mencoba pola baru. Bersenang-senang menjelajahi regex.
Tidak, *
akan cocok dengan karakter nol atau lebih. Anda harus menggunakan +
, yang cocok dengan satu atau lebih.
Ungkapan ini mungkin bekerja lebih baik untuk Anda: [A-Z]+123
Cara paling umum yang saya lihat untuk menyandikan ini adalah dengan kelas karakter yang anggotanya membentuk partisi dari semua karakter yang mungkin.
Biasanya orang menulis bahwa sebagai [\s\S]
(spasi atau non-spasi), meskipun [\w\W]
, [\d\D]
, dll semua akan bekerja.
.*
dan.+
untuk karakter apa pun kecuali untuk baris baru.
Untuk jaga-jaga, Anda ingin menyertakan baris baru, ekspresi berikut mungkin juga berfungsi untuk bahasa-bahasa yang diperlukan pelarian ganda seperti Java atau C ++:
[\\s\\S]*
[\\d\\D]*
[\\w\\W]*
untuk nol atau lebih banyak kali, atau
[\\s\\S]+
[\\d\\D]+
[\\w\\W]+
untuk satu atau lebih kali.
Pelarian ganda tidak diperlukan untuk beberapa bahasa seperti, C #, PHP, Ruby, PERL, Python, JavaScript:
[\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
Jika Anda ingin menjelajahi ekspresi, sudah dijelaskan di panel kanan atas regex101.com . Jika mau, Anda juga dapat menonton di tautan ini , bagaimana itu cocok dengan beberapa input sampel.
jex.im memvisualisasikan ekspresi reguler:
(\W|\w)*
bukannya melarikan diri ganda
Solusi spesifik untuk contoh masalah: -
Cobalah [A-Z]*123$
akan cocok 123
, AAA123
, ASDFRRF123
. Jika Anda membutuhkan setidaknya karakter sebelum 123
digunakan [A-Z]+123$
.
Solusi Umum untuk pertanyaan (Bagaimana mencocokkan "karakter apa saja" dalam ekspresi reguler):
[\w|\W]{min_char_to_match,}
.[\S]{min_char_to_match,}
.[^]
harus cocok dengan karakter apa pun, termasuk baris baru. [^
CHARS]
cocok dengan semua karakter kecuali untuk yang ada di CHARS . Jika CHARS kosong, cocok dengan semua karakter.
Contoh JavaScript:
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
Coba regex .{3,}
. Ini akan cocok dengan semua karakter kecuali baris baru.
Saya bekerja ini Tidak selalu titik berarti char. Pengecualian saat mode single line. \p{all}
seharusnya
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");
}