Bagaimana cara membuat ekspresi yang benar-benar cocok dengan apa pun (termasuk spasi putih)?
Contoh:
Regex: Saya membeli _____ domba.
Cocok: Saya membeli domba. Saya membeli domba. Saya membeli lima domba.
Saya mencoba menggunakan (.*)
, tetapi sepertinya itu tidak berhasil.
Pembaruan: Saya berhasil, ternyata masalahnya bukan pada ekspresi reguler, hanya saja (.) Karakternya yang lolos.
.*
harus bekerja. Bisakah Anda menempelkan kode Anda yang sebenarnya?Jawaban:
Biasanya titik cocok dengan karakter apa pun kecuali baris baru .
Jadi jika
.*
tidak berfungsi, atur opsi "dot cocok dengan baris baru" (atau gunakan(?s).*
).Jika Anda menggunakan JavaScript, yang tidak memiliki opsi "dotall", coba
[\s\S]*
. Ini berarti "cocok dengan sejumlah karakter apa pun yang merupakan spasi putih atau non-spasi putih" - secara efektif "cocok dengan string apa pun".Opsi lain yang hanya berfungsi untuk JavaScript (dan tidak dikenali oleh rasa regex lainnya) adalah
[^]*
yang juga cocok dengan string apa pun. Namun[\s\S]*
sepertinya lebih banyak digunakan, mungkin karena lebih portable.sumber
.*
tidak cocok\n
tetapi menghasilkan string yang berisi hanya\n
karena cocok dengan 0 karakter.(?s).*
karya - karya untuk saya cocok dengan semuanya termasuk baris baru*
(seperti pada/.*(?:)/
) atau menggunakan konstruktor regex (var foo = new RegExp(".*")
).(.*?)
cocok dengan apa pun - Saya telah menggunakannya selama bertahun-tahun.sumber
("title":".*?")
[\s\S]*
atau[^]*
.w+
tidak cukup, saya akhirnya menggunakan.+
. Untungnya belum kembali untuk menggigitku.Pilih & ingat 1 dari yang berikut ini !!! :)
Penjelasan:
\s
: whitespace\S
: bukan whitespace\w
: kata\W
: bukan kata\d
: digit\D
: bukan digit(Anda dapat bertukar
*
untuk+
jika Anda ingin 1 atau LEBIH karakter [bukan 0 atau lebih]).BONUS EDIT:
Jika Anda ingin mencocokkan semuanya dalam satu baris, Anda dapat menggunakan ini:
Penjelasan:
^
: tidak\n
: linebreak+
: untuk 1 karakter atau lebihsumber
Coba ini:
atau bahkan
sumber
Gunakan
.*
, dan pastikan Anda menggunakan padanan implementasi Anda dengan satu baris sehingga Anda akan cocok dengan akhir baris .Ada penjelasan yang bagus di sini -> http://www.regular-expressions.info/dot.html
sumber
Karena
.
Temukan karakter tunggal, kecuali baris baru atau terminator garis.Jadi, untuk mencocokkan apa pun, Anda dapat menggunakan seperti ini:
(.|\n)*?
Semoga ini bisa membantu!
sumber
(.*?)
tidak bekerja untuk saya. Saya mencoba mencocokkan komentar yang dikelilingi oleh/* */
, yang mungkin berisi banyak baris.Coba ini:
Regex ini cocok dengan
a
atauanything else expect a
. Tentu saja, itu berarti mencocokkan segalanya.BTW, dalam situasi saya,
/\*([a]|[^a])*/
cocok dengan komentar gaya C.Terima kasih @mpen untuk cara yang lebih ringkas.
sumber
[\s\S]
- yaitu ruang pertandingan dan non-spasi.Untuk JavaScript, jawaban terbaik dan paling sederhana adalah /.*/.
Seperti yang disarankan oleh orang lain /(.*?)/ akan bekerja dengan baik tetapi /.*/ lebih sederhana. () Di dalam pola tidak diperlukan, sejauh yang saya bisa lihat atau akhirnya? benar-benar cocok dengan apa pun (termasuk string kosong)
NON-SOLUSI:
/ [\ s \ S] / TIDAK cocok dengan string kosong jadi itu bukan solusinya.
/ [\ s \ S] * / TIDAK cocok juga dengan string kosong. Tetapi memiliki masalah: Jika Anda menggunakannya dalam kode Anda maka Anda tidak dapat berkomentar kode seperti itu karena '* /' ditafsirkan sebagai akhir-komentar.
/ ([\ s \ S] *) / berfungsi dan tidak memiliki masalah komentar. Tetapi lebih lama dan lebih rumit untuk dipahami daripada /.*/.
sumber
Jika Anda menggunakan JavaScript, ES2018 menambahkan tanda (dotAll). Dengan
s
bendera, titik.
akan cocok dengan karakter apa pun termasuk baris baru.Catatan : Ini belum didukung di beberapa browser.
sumber
Spesifikasi 2018 menyediakan bendera s (alias: dotAll), sehingga
.
akan cocok dengan karakter apa pun, termasuk linebreak:Kode di atas berfungsi di Chrome, tetapi
s
bender belum diimplementasikan di Firefox, tetapi akan segera dilakukan .sumber
http://sandbox.phpcode.eu/g/b2243.php
sumber
Saya merekomendasikan penggunaan
/(?=.*...)/g
Contoh
Gunakan regex101 untuk menguji
sumber
Jujur banyak jawaban sudah tua jadi saya menemukan bahwa jika Anda hanya cukup menguji string apa pun terlepas dari konten karakter dengan "/.*/i" akan cukup mendapatkan SEMUA.
sumber