Sublime Text regex tidak mendeteksi tag multiline


130

Saya punya regex ini di sini;

\[sometag\](.*)\[/sometag\]

Yang seharusnya menangkap teks yang dikelilingi oleh [sometag]tag. Ini berfungsi untuk informasi satu baris yang terkandung dalam tag ini, seperti pada string [sometag]this is a bit of text[/sometag]. Tapi itu tidak berfungsi pada teks yang membentang beberapa baris, seperti ini;

[sometag] here is more text

it spans more than one line [/sometag]

Untuk beberapa alasan, pencari regex teks Sublime tidak akan mengenali tag di beberapa baris. Saya ingin tahu apakah ini masalah dengan Sublime Text, opsi yang dapat diubah, atau hanya ketidakmampuan pribadi saya dengan regex.

Jawaban:


240

Pada awalnya, gunakan pengubah dotall (?s)untuk membuat dot agar cocok dengan karakter baris baru.

(?s)\[sometag\](.*?)\[\/sometag\]

DEMO


Terima kasih! Mengapa saya harus memasukkan tanda tanya ekstra itu?
Maurdekye

8
?setelah *akan melakukan pertandingan non-serakah. Pertimbangkan [b]foo[/b]foo[b]bar[/b]sebagai contoh. \[b\].*\[\/b\]akan mencocokkan keseluruhan dari awal b hingga penutupan terakhir b.
Avinash Raj

mainkan saja dengan menambahkan dan menghapusnya ?di regex101.com/r/gI0xC3/2
Avinash Raj

11
(? s) menyebabkan titik juga menyertakan baris baru
cmroanirgo

3
tanda tanya setelah tanda bintang penting karena mendefinisikan pertandingan sebagai tidak serakah.
andrej

12

Jika memodifikasi mode dot tidak dapat diterima karena beberapa alasan, Anda dapat menganggapnya:

[sometag](.|\n)+?[/sometag]

3
Jangan pernah gunakan (.|\n)+?jika Anda memiliki akses ke pengubah DOTALL. Jika Anda tidak dapat menggunakan (?s)falvor, gunakan [\s\S]/ [\d\D]/ [\w\W], tetapi bukan derai bergantian yang disarankan di sini. Pola ini sangat tidak efisien dan dapat dengan mudah menyebabkan masalah batas waktu.
Wiktor Stribiżew

1
@ WiktorStribiżew: Bisakah Anda menjelaskan mengapa itu tidak efisien? Saya selalu menggunakan [\s\S], tetapi sekilas (.|\n)akan tampak setara? Apakah ini berkaitan dengan grup yang cocok? Tapi (?:.|\n)apakah akan sama?
Cerberus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.