Sublime Text regex che non rileva tag multilinea


130

Ho questa regex qui;

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

Che dovrebbe catturare il testo circondato dal [sometag]tag. Funziona con le informazioni a riga singola contenute in questi tag, come sulla stringa [sometag]this is a bit of text[/sometag]. Ma non funziona su testo che si estende su più righe, in questo modo;

[sometag] here is more text

it spans more than one line [/sometag]

Per qualche motivo, il regex finder di Sublime text non riconoscerà i tag su più righe. Voglio sapere se questo è un problema con Sublime Text, un'opzione selezionabile o solo la mia incompetenza personale con le regex.

Risposte:


240

All'inizio, usa un modificatore dotall (?s)per creare un punto che corrisponda anche ai caratteri di nuova riga.

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

DEMO


Grazie! Perché devo includere quei punti interrogativi extra però?
Maurdekye,

8
?dopo *farà una partita non golosa. Considera [b]foo[/b]foo[b]bar[/b]come esempio. \[b\].*\[\/b\]corrisponderebbe al tutto dalla b iniziale all'ultima chiusura b.
Avinash Raj,

gioca con l'aggiunta e la rimozione di ?in questo regex101.com/r/gI0xC3/2
Avinash Raj

11
(? s) fa sì che il punto includa anche le nuove righe
cmroanirgo,

3
il punto interrogativo dopo l'asterisco è importante in quanto definisce la corrispondenza come non avida.
Andrej,

12

Se la modifica della modalità punto è inammissibile per alcuni motivi, è possibile considerare che:

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

3
Non usare mai (.|\n)+?se si ha accesso al modificatore DOTALL. Se non è possibile utilizzare (?s)in alcuni falvor, utilizzare [\s\S]/ [\d\D]/ [\w\W], ma non lo schema di alternanza suggerito qui. Questo modello è altamente inefficiente e può facilmente portare a un problema di timeout.
Wiktor Stribiżew,

1
@ WiktorStribiżew: puoi spiegare perché è inefficiente? Uso sempre [\s\S], ma a prima vista (.|\n)sembrerebbe equivalente? Ha a che fare con i gruppi corrispondenti? Ma allora (?:.|\n)sarebbe lo stesso?
Cerbero
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.