Naar de hoofdinhoud
SubtitleMatrix

Reguliere expressies in ondertitels

Tekst en stijlVervangen met reguliere expressies
Of plak ondertiteltekst

Opties

Een reguliere expressie, vergeleken met de tekst van elk blok. Elke treffer wordt vervangen. De twee pagina’s in deze sectie delen het vak: de ene opent het leeg voor een patroon dat je al hebt, de andere begint met een patroon dat je beide kanten op kunt bewerken.

Waar elke treffer in verandert. Laat leeg om elke treffer te verwijderen. Anders dan bij de pagina voor letterlijk zoeken en vervangen is een dollarteken hier bijzonder: $1 staat voor de eerste groep tussen haakjes van de treffer, $& voor de hele treffer en $$ voor een letterlijk dollarteken.

De letters waarmee het patroon wordt gecompileerd. g en u staan standaard aan: u laat het patroon de tekst per teken lezen in plaats van per code-eenheid, wat \p{L} en verwanten hun betekenis geeft. Voeg i toe om hoofdletters te negeren, m voor regelaankers, s om een punt een regeleinde te laten treffen. Maak het vak leeg om zonder flags te compileren. Elke andere letter wordt geweigerd in plaats van genegeerd, want een patroon dat onder flags loopt die je niet hebt gevraagd, is een patroon dat stil iets anders betekent.

In welke beeldsnelheid de tijden worden geteld. Op de formaatpagina’s is dit wat MicroDVD nodig heeft, want het slaat tijden op als framenummers. Op de beeldsnelheidspagina’s is het de snelheid waartegen het bestand getimed is — de versie waarvoor de ondertitels gemaakt zijn — en het tweede vak op de pagina neemt de snelheid van de video die je gaat gebruiken. 23,976, 24, 25, 29,97, 30, 50, 59,94 en 60 zijn de gebruikelijke. Een verkeerde waarde verschuift de hele tijdlijn, en op de beeldsnelheidspagina’s verschuift ze die met een verhouding in plaats van met een vast bedrag.

Vul Patroon in om te starten.

Deze pagina herschrijft de tekst in ondertitelblokken met een patroon dat je zelf schrijft. Een patroon is geen vaste tekenreeks: `\d+` betekent een reeks cijfers, `(cat|dog)` betekent een van beide woorden, en een punt staat voor elk teken. Elke treffer, in elk blok, wordt in één doorgang vervangen, en de pagina meldt hoeveel plekken zijn veranderd. Alleen de tekst beweegt — elk begin en elk einde wordt precies zo overgenomen als het was.

Het vervangingsvak is ook geen vaste tekenreeks. Een dollarteken is er speciaal: `$1` staat voor wat de eerste groep tussen haakjes van de treffer ving, `$&` voor de hele treffer en `$$` voor een letterlijk dollarteken. Daarmee ruimt één regel duizenden verschillende zinnen op — de losse spatie voor een punt weghalen terwijl het leesteken blijft, omdat het leesteken is wat de groep ving.

Patronen lopen met `g` en `u` aan. `g` betekent elke treffer vinden in plaats van alleen de eerste; `u` laat het patroon de tekst teken voor teken lezen in plaats van code-eenheid voor code-eenheid, en dat is wat `\p{L}` een letter laat betekenen. Voeg `i` toe om hoofdletters te negeren, `m` om ankers per regel te laten werken, `s` om een punt ook een regeleinde te laten matchen. Maak het vak leeg om zonder vlaggen te draaien. Elke andere letter weigert de hele run in plaats van te worden genegeerd, want een patroon dat onder vlaggen draait die je niet vroeg, betekent stil iets anders.

Opmaak binnen de regel schuift mee wanneer er een eerlijke plek voor is: een tag verschuift als de bewerking erbuiten valt en rekt als de bewerking erbinnen valt. Kruist een treffer de rand van een tag, dan valt de opmaak weg en wordt ze geteld, omdat het alternatief een cursief om de verkeerde woorden is. Karaoke-timing valt weg zodra een treffer haar raakt, omdat de lettergreepverdeling niet meer op de woorden past. Niets wordt geüpload, elk bestand wordt in zijn eigen formaat teruggeschreven, en een seizoen kan in één keer door de wachtrij.

Voorbeelden

Het leesteken behouden met een groep

Invoer

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

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

Uitvoer

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

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

Het patroon is een reeks spaties gevolgd door een van . , ! ? — en de haakjes maken dat leesteken de eerste groep, zodat `$1` het terugzet. Drie treffers, drie veranderingen. Een letterlijke zoekopdracht kan dit niet uitdrukken: die kan alleen de ene vaste tekenreeks in de andere veranderen.

Eén patroon, beide spellingen

Invoer

The Colour of the sky.
colourless and calm.

Uitvoer

The color of the sky.
colorless and calm.

Met `i` in het vlaggenvak vangt `colour` ook de spelling met hoofdletter. Let op wat de vlag niet doet: de hoofdletter aan het begin van de regel is weg, omdat een patroon niet weet wat een woord in een zin doet. Als die hoofdletter ertoe doet, is dat een tweede regel — en dat is een bewuste tweede stap, geen fout van de eerste.

Een treffer die de rand van een cursiefreeks kruist

Invoer

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

Uitvoer

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

De treffer begint binnen de cursief en eindigt erbuiten, dus de helft van wat de opmaak bedekte is weg en er blijft geen juiste plek voor over. Ze valt weg en wordt geteld in plaats van om de verkeerde letters te blijven staan. De nieuwe tekst is wat het patroon vroeg; alleen de opmaak is het slachtoffer.

Veelgestelde vragen

Hoe behoud ik een deel van wat het patroon matche?

Zet haakjes om dat deel in het patroon en verwijs er in de vervanging naar als `$1` — `$2` voor de tweede groep, enzovoort. Het patroon `\s+([.,!?])` met vervanging `$1` haalt de spatie weg en houdt het leesteken, precies het werk dat een vaste tekenreeks niet kan doen. `$&` staat voor de hele treffer en `$$` voor een dollarteken dat je werkelijk in de tekst wilt hebben.

Met welke vlaggen draait het patroon?

`g` en `u` staan standaard aan. `g` vindt elke treffer in plaats van bij de eerste te stoppen, en `u` laat het patroon de tekst teken voor teken lezen, wat `\p{L}`, `\p{N}` en verwanten hun betekenis geeft. Voeg `i` toe voor hoofdletterongevoelig matchen, `m` om ankers per regel te laten werken, `s` om een punt een regeleinde te laten matchen. Een leeg vak draait zonder enige vlag. Elke andere letter — `x`, `y`, `d` — weigert de run in plaats van te worden genegeerd.

Is dit dezelfde pagina als zoeken en vervangen?

Nee, en het verschil zit in wat je in het vak typt. Die pagina matcht tekens precies zoals ze zijn geschreven, dus het enige dat fout kan gaan is dat je niets vindt. Deze pagina draait een programma, dat duizenden plekken in één doorgang kan matchen en herschrijven. Daarom begint het patroon hier leeg, worden onbekende vlaggen geweigerd en zijn het twee pagina’s: op de ene is een herschrijving die niet gebeurde een typefout, op de andere kan het een patroon zijn dat stil iets anders betekende.

Wat gebeurt er wanneer twee treffers elkaar overlappen?

De meest linkse wint en het zoeken gaat daarna verder, zoals elke reguliere-expressiemotor doet. Dus `aa` tegen `aaaa` vindt twee treffers en geen drie, en na vervanging is de tekst `bb`. Verwachtte je er drie, dan beschrijft het patroon iets wat de motor niet kan doen, en dat is beter te weten voordat het bestand terugkomt.

Beschermt de pagina me tegen een patroon dat traag is?

Ze weigert één familie voordat er iets draait: een herhaling op een groep die zelf al onbegrensd herhaalt, zoals `(a+)+` of `(\d+)+`. Dat zijn de patronen die een browsertab vastzetten, en dertig tekens invoer zijn genoeg. Drie vormen worden niet gevangen en kun je beter met de hand vermijden: twee overlappende alternatieven in een herhalende groep, zoals `(a|a)+`; meerdere overlappende herhalingen naast elkaar, zoals `a*a*a*b`; en enorme aantallen, zoals `(a{100}){100}`. Er wordt niets tegen de klok gecontroleerd, omdat een tijdslimiet hetzelfde bestand op een snelle machine anders zou laten uitkomen dan op een langzame.

Wat gebeurt er met cursief en andere opmaak wanneer de tekst wordt herschreven?

Een tag buiten de bewerking schuift mee met de tekst, en een tag die de bewerking bevat rekt mee of krimpt. Kruist een treffer de rand van een tag, dan is er geen juiste plek meer voor de opmaak, dus valt ze weg en zegt het verliesoverzicht hoeveel er zijn weggevallen. Karaoke-timing valt weg zodra een treffer haar raakt, omdat de verdeling per lettergreep niet meer op de woorden past.

Kan ik dit op elk ondertitelformaat gebruiken?

Ja. Het patroon wordt toegepast op de tekst van elk blok, en alle twaalf formaten lezen die tekst uit, dus een SRT, een WebVTT-bestand, een ASS-bestand met stijlen, een LRC-songtekst en een platte transcriptie werken hetzelfde. Elk bestand wordt teruggeschreven in het formaat waarin het kwam, en de framenummers van een MicroDVD-bestand gebruiken de beeldsnelheid uit het paneel.

Gerelateerde hulpmiddelen