Sublime Text regex çok satırlı etiketleri algılamıyor


130

Bu normal ifade burada var;

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

[sometag]Etiketin çevrelediği metni yakalaması gerekiyor . Dizede olduğu gibi bu etiketlerde bulunan tek satırlık bilgiler için çalışır [sometag]this is a bit of text[/sometag]. Ancak bunun gibi birden çok satıra yayılan metinler üzerinde çalışmaz;

[sometag] here is more text

it spans more than one line [/sometag]

Bazı nedenlerden dolayı, Sublime metninin normal ifade bulucusu, etiketleri birden çok satırda tanımaz. Bunun Sublime Text ile ilgili bir sorun mu, değiştirilebilir bir seçenek mi, yoksa sadece normal ifadelerle ilgili kişisel yetersizliğim mi olduğunu bilmek istiyorum.

Yanıtlar:


240

Başlangıçta, (?s)noktayı yeni satır karakterleriyle eşleştirmek için bir dotall değiştirici kullanın.

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

DEMO


Teşekkürler! Yine de neden bu ekstra soru işaretlerini eklemem gerekiyor?
Maurdekye

8
?sonra *açgözlü olmayan bir maç yapacak. [b]foo[/b]foo[b]bar[/b]Örnek olarak düşünün . \[b\].*\[\/b\]b'nin başlangıcından son kapanışına kadar bütün ile eşleşir.
Avinash Raj


11
(? s) noktanın yeni satırları da içermesine neden olur
cmroanirgo

3
yıldız işaretinden sonraki soru işareti, eşleşmeyi açgözlü olmayan olarak tanımladığı için önemlidir.
andrej

12

Nokta modunun değiştirilmesi bazı nedenlerden dolayı kabul edilemezse, bunu kabul edebilirsiniz:

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

3
(.|\n)+?DOTALL değiştiriciye erişiminiz varsa asla kullanmayın . Eğer kullanamıyorsanız (?s)bazı falvor içinde, kullanım [\s\S]/ [\d\D]/ [\w\W]değil münavebe pıtır burada önerdi. Bu model oldukça verimsizdir ve kolayca zaman aşımı sorununa yol açabilir.
Wiktor Stribiżew

1
@ WiktorStribiżew: Neden verimsiz olduğunu açıklayabilir misiniz? Her zaman kullanırım [\s\S], ama bir bakışta (.|\n)eşdeğer görünebilir mi? Eşleşen gruplarla mı ilgili? Ama o (?:.|\n)zaman aynı mı olur?
Cerberus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.