Di Java RegEx, cara mengetahui perbedaan antara .
(titik) karakter meta dan titik normal seperti yang kita gunakan dalam kalimat apa pun. Bagaimana menangani situasi seperti ini untuk karakter meta lain juga suka ( *
,+
, \d
, ...)
150
Solusi yang diajukan oleh anggota lain tidak bekerja untuk saya.
Tetapi saya menemukan ini:
untuk menghindari titik di regexp menulis java
[.]
sumber
\\.
tidak bekerja untuk saya:\.
mengeluh bahwa.
tidak perlu melarikan diri,\\.
membuatnya berpikir itu\.
bukan.
,\\\.
dan pembangun melemparkan kesalahan,[.]
adalah satu-satunya hal yang berhasil.\\.
di dalam string literal memberi Anda\.
yang dibutuhkan regex untuk melihat titik sebagai titik literal alih-alih pencocokan karakter apa pun.Ekspresi reguler gaya-perl (yang mendasari mesin regex Java memperlakukan) karakter berikut sebagai karakter khusus:
.^$|*+?()[{\
memiliki makna khusus di luar kelas karakter,]^-\
memiliki makna khusus di dalam kelas karakter ([...]
).Jadi, Anda perlu keluar dari simbol-simbol (dan hanya itu) tergantung pada konteks (atau, dalam kasus kelas karakter, letakkan di posisi di mana mereka tidak dapat disalahartikan).
Tidak perlu melarikan diri dari karakter lain mungkin berhasil, tetapi beberapa mesin regex akan memperlakukan ini sebagai kesalahan sintaks, misalnya
\_
akan menyebabkan kesalahan dalam .NET.Beberapa yang lain akan mengarah pada hasil yang salah, misalnya
\<
ditafsirkan sebagai literal<
dalam Perl, tetapi diegrep
dalamnya berarti "batas kata".Jadi tulis
-?\d+\.\d+\$
untuk mencocokkan1.50$
,-2.00$
dll. Dan[(){}[\]]
untuk kelas karakter yang cocok dengan semua jenis kurung / kurung / kurung.Jika Anda perlu mengubah string input pengguna menjadi bentuk aman-regex, gunakan
java.util.regex.Pattern.quote
.Bacaan lebih lanjut: Blog Jan Goyvaert, RegexGuru tentang melarikan diri dari karakter meta
sumber
Melarikan diri karakter khusus dengan backslash.
\.
,\*
,\+
,\\d
, Dan sebagainya. Jika Anda tidak yakin, Anda dapat keluar dari karakter non-alfabet baik khusus atau tidak. Lihat javadoc untuk java.util.regex.Pattern untuk informasi lebih lanjut.sumber
Ini kode yang bisa langsung Anda salin tempel:
Dan bagaimana jika secara keliru ada ruang yang tersisa sebelum atau sesudah "." dalam kasus seperti ini? Itu selalu praktik terbaik untuk mempertimbangkan ruang-ruang itu juga.
Di sini, \\ s * ada di sana untuk mempertimbangkan spasi dan memberi Anda hanya string yang diperlukan terpecah.
sumber
Saya ingin mencocokkan string yang diakhiri dengan ". *" Untuk ini saya harus menggunakan yang berikut:
Agak konyol jika Anda memikirkannya: D Inilah artinya. Pada awal string dapat ada karakter nol atau lebih banyak yang diikuti oleh titik "." diikuti oleh bintang (*) di akhir string.
Saya harap ini berguna bagi seseorang. Terima kasih atas hal backslash untuk Fabian.
sumber
"\\.\\*$"
. Tidak perlu mencocokkan awal string jika itu tidak masalah bagi Anda.Jika Anda ingin mengakhiri memeriksa apakah kalimat Anda diakhiri dengan ". " Maka Anda harus menambahkan [\. \ ] $ Ke bagian akhir pola Anda.
sumber
Saya sedang melakukan beberapa array dasar di JGrasp dan menemukan bahwa dengan metode accessor untuk array char [] [] menggunakan ('.') Untuk menempatkan satu titik.
sumber