Andare al contenuto principale
SubtitleMatrix

Sostituire con espressioni regolari

Testo e stileSostituire con espressioni regolari
Oppure incollare il testo dei sottotitoli

Opzioni

Un’espressione regolare, confrontata con il testo di ogni blocco. Ogni corrispondenza viene sostituita. Le due pagine di questa sezione condividono il riquadro: una lo apre vuoto per un’espressione che si ha già, l’altra lo avvia con un’espressione che si può modificare in entrambi i casi.

Ciò in cui diventa ogni corrispondenza. Lasciare vuoto per eliminare ogni corrispondenza. A differenza della pagina di trova e sostituisci letterale, qui il simbolo del dollaro è speciale: $1 indica il primo gruppo tra parentesi della corrispondenza, $& l’intera corrispondenza e $$ un dollaro letterale.

Le lettere con cui viene compilata l’espressione. g e u sono attivi per impostazione predefinita: u fa leggere il testo un carattere alla volta anziché un’unità di codice alla volta, ed è ciò che fa sì che \p{L} e simili significhino quello che dicono. Aggiungere i per ignorare maiuscole e minuscole, m per gli ancoraggi di riga, s perché il punto corrisponda a un’interruzione di riga. Svuotare il riquadro per compilare senza alcun flag. Qualsiasi altra lettera viene rifiutata anziché ignorata, perché un’espressione eseguita con flag che non si sono chiesti è un’espressione che significa silenziosamente qualcos’altro.

La frequenza dei fotogrammi in cui sono contati i tempi. Nelle pagine di formato è quella che serve a MicroDVD, perché memorizza i tempi come numeri di fotogramma. Nelle pagine della frequenza dei fotogrammi è la cadenza con cui è stato temporizzato il file — la versione per cui sono stati creati i sottotitoli — e il secondo riquadro della pagina accetta la frequenza del video con cui verranno usati. 23,976, 24, 25, 29,97, 30, 50, 59,94 e 60 sono quelle comuni. Sbagliarla sposta l’intera timeline, e nelle pagine della frequenza dei fotogrammi la sposta di un rapporto anziché di un importo fisso.

Compilare Espressione regolare per avviare.

Questa pagina riscrive il testo dentro i blocchi dei sottotitoli con un modello che scrivete voi. Un modello non è una stringa fissa: `\d+` significa qualsiasi sequenza di cifre, `(cat|dog)` significa l’una o l’altra parola, e un punto sta per qualsiasi carattere. Ogni corrispondenza, in ogni blocco, viene sostituita in una sola passata, e la pagina riporta quanti punti sono cambiati. Si muove solo il testo: ogni orario di inizio e di fine viene trasportato esattamente com’era.

Anche la casella di sostituzione non è una stringa fissa. Il dollaro al suo interno è speciale: `$1` sta per ciò che il primo gruppo tra parentesi della corrispondenza ha catturato, `$&` per l’intera corrispondenza e `$$` per un dollaro letterale. È questo che permette a una sola regola di sistemare migliaia di righe diverse — cancellare lo spazio prima di un punto fermo tenendo la punteggiatura, perché la punteggiatura è ciò che il gruppo ha catturato.

I modelli girano con `g` e `u` attivi. `g` significa trovare ogni corrispondenza invece della sola prima; `u` fa leggere il testo un carattere alla volta invece di un’unità di codice alla volta, ed è ciò che fa sì che `\p{L}` significhi una lettera. Aggiungete `i` per ignorare le maiuscole, `m` per far funzionare le ancore riga per riga, `s` per far corrispondere un punto anche a un’interruzione di riga. Svuotate la casella dei flag per girare senza nessuno di essi. Qualsiasi altra lettera rifiuta l’intera esecuzione invece di essere ignorata, perché un modello eseguito con flag che non avete chiesto è un modello che significa qualcos’altro in silenzio. Lo stile in linea viene portato con sé ogni volta che c’è un posto onesto in cui stare, e quando una corrispondenza attraversa il bordo di un tag il markup viene scartato e contato nel rapporto delle perdite. Nulla viene caricato, ogni file viene riscritto nel proprio formato, e un’intera stagione passa dalla coda.

Esempi

Tenere la punteggiatura con un gruppo di cattura

Ingresso

1
00:00:01,000 --> 00:00:02,000
We stopped , and waited .

2
00:00:03,000 --> 00:00:04,000
Right !

Uscita

1
00:00:01,000 --> 00:00:02,000
We stopped, and waited.

2
00:00:03,000 --> 00:00:04,000
Right!

Il modello è una sequenza di spazi seguita da uno tra punto, virgola, punto esclamativo e punto interrogativo: le parentesi fanno di quella punteggiatura il primo gruppo, quindi `$1` la rimette al suo posto. Tre corrispondenze, tre cambiamenti. Una ricerca letterale non può esprimere affatto questo caso, perché sa solo trasformare una stringa fissa in un’altra stringa fissa.

Un solo modello, entrambe le grafie

Ingresso

The Colour of the sky.
colourless and calm.

Uscita

The color of the sky.
colorless and calm.

Con `i` nella casella dei flag, `colour` prende anche la grafia con la maiuscola. Notate ciò che il flag non fa: la maiuscola che apriva la riga sparisce, perché un modello non ha idea di che cosa stia facendo una parola dentro una frase. Se la maiuscola conta, quella è una seconda regola.

Una corrispondenza che attraversa il bordo di un corsivo

Ingresso

1
00:00:01,000 --> 00:00:04,000
<i>Hello there</i>, welcome aboard

Uscita

1
00:00:01,000 --> 00:00:04,000
Hello there. Welcome aboard

La corrispondenza comincia dentro il corsivo e finisce fuori, quindi metà di ciò che il markup copriva è sparita e non resta un posto corretto per esso. Viene scartato e contato, invece di restare avvolto intorno alle lettere sbagliate. La sostituzione porta anche la punteggiatura e il maiuscolo della frase nuova al posto di quelli vecchi.

Domande frequenti

Come faccio a tenere una parte di ciò che il modello ha trovato?

Mettete tra parentesi quella parte nel modello e richiamatela come `$1` nella sostituzione — `$2` per il secondo gruppo, e così via. Il modello `\s+([.,!?])` con la sostituzione `$1` cancella lo spazio e conserva la punteggiatura, che è esattamente il lavoro che una stringa fissa non sa fare. `$&` sta per l’intera corrispondenza e `$$` per un dollaro che volete davvero nel testo.

Con quali flag viene eseguito il modello?

`g` e `u` sono attivi per impostazione predefinita. `g` trova ogni corrispondenza invece di fermarsi alla prima, e `u` fa leggere il testo un carattere alla volta, che è ciò che fa significare qualcosa a `\p{L}`, `\p{N}` e simili. Aggiungete `i` per ignorare le maiuscole, `m` per far funzionare le ancore riga per riga e `s` per far corrispondere un punto a un’interruzione di riga. Svuotare la casella esegue senza alcun flag. Qualsiasi altra lettera — `x`, `y`, `d` — rifiuta l’esecuzione invece di essere ignorata.

È la stessa cosa della pagina di ricerca e sostituzione?

No, e la differenza sta in ciò che digitate nella casella. Quella pagina confronta i caratteri esattamente come sono scritti, quindi l’unica cosa che può andare storta è non trovare nulla. Questa pagina esegue un programma, che può corrispondere a migliaia di punti in una passata e riscriverli tutti. Per questo il modello parte vuoto qui, i flag sconosciuti vengono rifiutati e le due pagine sono separate: su una pagina una riscrittura che non è avvenuta è un errore di battitura, sull’altra può essere un modello che significava qualcos’altro.

Che cosa succede quando due corrispondenze si sovrappongono?

Vince la più a sinistra e la scansione continua dopo di essa, che è ciò che fa ogni motore di espressioni regolari. Quindi `aa` su `aaaa` trova due corrispondenze e non tre, e dopo la sostituzione il testo è `bb`. Se vi aspettavate tre corrispondenze, il modello sta descrivendo qualcosa che il motore non può fare, ed è meglio saperlo prima che il file torni indietro.

La pagina mi protegge da un modello lento?

Rifiuta una famiglia prima di cominciare: una ripetizione applicata a un gruppo che già si ripete senza limite, come `(a+)+` o `(\d+)+`. Sono i modelli che bloccano una scheda del browser, e trenta caratteri di testo bastano. Tre forme non vengono intercettate e conviene evitarle a mano: due alternative sovrapposte dentro un gruppo ripetuto, come `(a|a)+`; più ripetizioni sovrapposte una accanto all’altra, come `a*a*a*b`; e conteggi enormi, come `(a{100}){100}`. Nulla viene controllato con un orologio, perché un limite di tempo farebbe uscire lo stesso file in modo diverso su una macchina veloce e su una lenta.

Che fine fanno corsivi e altri stili quando il testo viene riscritto?

Un tag fuori dalla modifica si sposta insieme al testo, e un tag che contiene la modifica si allunga o si accorcia per adattarsi. Quando una corrispondenza attraversa il bordo di un tag non resta più un posto corretto per il markup, quindi viene scartato e il rapporto delle perdite dice quanti sono stati persi. La temporizzazione karaoke viene scartata ogni volta che una corrispondenza la tocca, perché la divisione per sillaba non è più allineata con le parole.

Posso usare questa pagina su qualsiasi formato di sottotitoli?

Sì. Il modello viene applicato al testo di ogni blocco, e tutti e dodici i formati leggono quel testo, quindi un file SRT, un WebVTT, un ASS con gli stili, un testo di canzone LRC o una trascrizione in testo semplice funzionano allo stesso modo. Ogni file viene riscritto nel formato con cui è arrivato, e i numeri di fotogramma di un file MicroDVD usano la frequenza dei fotogrammi indicata nel pannello.

Strumenti correlati