Tautan ini menunjukkan pendekatan yang sepertinya berfungsi -> [^] + Yang berarti 'tidak cocok dengan karakter', negatif ganda yang dapat dibaca kembali sebagai 'cocok dengan karakter apa pun'. Sumber - loune.net/2011/02/…
Hoki
Jawaban:
645
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 lebih
Itu beberapa informasi yang sangat berguna! Saya berasumsi .akan cocok dengan baris baru. Saya senang saya membaca jawaban Anda, saya harus menggunakannya!
Ben Kane
Anda juga kadang-kadang perlu mencocokkan baris baru di regex Java dalam konteks di mana Anda tidak dapat melewati Pattern.DOTALL, seperti saat melakukan pencarian regex multi-line di Eclipse, atau sebagai pengguna aplikasi Java apa pun yang menawarkan pencarian regex. Berdasarkan panduan regular-expression.info , Anda mungkin perlu menggunakan {.,\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.
Theodore Murdock 3-15
8
@TheodoreMurdock [\s\S]adalah cara populer untuk mencocokkan karakter apa pun jika Anda tidak dapat menggunakan DOTALL.
mpen
Kalau-kalau itu akan terlintas di pikiran Anda, JANGAN gunakan (?:.|\\v)*, karena JDK-6337993 .
Olivier Cailloux
22
Gunakan pola .untuk mencocokkan karakter apa saja sekali, .*untuk mencocokkan karakter apa pun nol atau lebih banyak, .+untuk mencocokkan setiap karakter satu atau lebih kali.
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.
Suara positif di sini. OP tidak menentukan, tetapi tampaknya benar untuk menambahkan bahwa pola tersebut akan cocok dengan karakter apa pun termasuk hal-hal seperti ### 123, 123123,% $ # 123 yang mungkin tidak diinginkan OP. Kelas karakter yang digunakan @Huusom di atas semua OP akan menggunakan hanya huruf alfabet huruf besar yang mungkin maksudnya.
techdude
9
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.
Untuk referensi, dari regular-expressions.info/dot.html : "JavaScript dan VBScript tidak memiliki opsi untuk membuat karakter pemecah garis titik pencocokan. Dalam bahasa tersebut, Anda dapat menggunakan kelas karakter seperti [\ s \ S] untuk mencocokkan karakter apa pun. Karakter ini cocok dengan karakter yang merupakan karakter spasi putih (termasuk karakter pemisah baris), atau karakter yang bukan karakter spasi putih. Karena semua karakter adalah spasi putih atau non-spasi putih, kelas karakter ini cocok dengan karakter apa pun . "
Dean Or
7
.*dan .+untuk karakter apa pun kecuali untuk baris baru.
Melarikan diri ganda
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 Tunggal:
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]+
Uji
import java.util.regex.Matcher;import java.util.regex.Pattern;publicclassRegularExpression{publicstaticvoid main(String[] args){finalString regex_1 ="[\\s\\S]*";finalString regex_2 ="[\\d\\D]*";finalString regex_3 ="[\\w\\W]*";finalString string ="AAA123\n\t"+"ABCDEFGH123\n\t"+"XXXX123\n\t";finalPattern pattern_1 =Pattern.compile(regex_1);finalPattern pattern_2 =Pattern.compile(regex_2);finalPattern pattern_3 =Pattern.compile(regex_3);finalMatcher matcher_1 = pattern_1.matcher(string);finalMatcher matcher_2 = pattern_2.matcher(string);finalMatcher 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));}}}
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.
[^]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.
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");}
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 lebihsumber
Ya itu akan berfungsi, meskipun perhatikan bahwa
.
tidak akan cocok dengan baris baru kecuali Anda melewati flag DOTALL saat mengkompilasi ekspresi:sumber
.
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 .Gunakan pola
.
untuk mencocokkan karakter apa saja sekali,.*
untuk mencocokkan karakter apa pun nol atau lebih banyak,.+
untuk mencocokkan setiap karakter satu atau lebih kali.sumber
Ada banyak pengujian regex canggih dan alat pengembangan, tetapi jika Anda hanya ingin memanfaatkan uji sederhana di Jawa, berikut ini satu untuk Anda mainkan:
Sekarang Anda dapat dengan mudah menambahkan testcases baru dan mencoba pola baru. Bersenang-senang menjelajahi regex.
Lihat juga
sumber
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
sumber
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.sumber
Melarikan diri ganda
Untuk jaga-jaga, Anda ingin menyertakan baris baru, ekspresi berikut mungkin juga berfungsi untuk bahasa-bahasa yang diperlukan pelarian ganda seperti Java atau C ++:
untuk nol atau lebih banyak kali, atau
untuk satu atau lebih kali.
Pelarian Tunggal:
Pelarian ganda tidak diperlukan untuk beberapa bahasa seperti, C #, PHP, Ruby, PERL, Python, JavaScript:
Uji
Keluaran
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.
Sirkuit RegEx
jex.im memvisualisasikan ekspresi reguler:
sumber
(\W|\w)*
bukannya melarikan diri gandaSolusi spesifik untuk contoh masalah: -
Cobalah
[A-Z]*123$
akan cocok123
,AAA123
,ASDFRRF123
. Jika Anda membutuhkan setidaknya karakter sebelum123
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,}
.sumber
[^]
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:
sumber
Coba regex
.{3,}
. Ini akan cocok dengan semua karakter kecuali baris baru.sumber
Saya bekerja ini Tidak selalu titik berarti char. Pengecualian saat mode single line.
\p{all}
seharusnyasumber