Замена по регулярному выражению
Или вставьте текст субтитров
Параметры
Регулярное выражение, сопоставляемое с текстом каждой реплики. Каждое совпадение заменяется. Две страницы этого раздела делят поле: одна открывает его пустым для вашего готового шаблона, другая начинает с шаблона, который можно править.
Чем становится каждое совпадение. Оставьте пустым, чтобы удалить все совпадения. В отличие от страницы буквальной замены, знак доллара здесь особенный: $1 — первая группа в скобках, $& — всё совпадение, $$ — буквальный доллар.
Буквы, с которыми компилируется шаблон. g и u включены по умолчанию: u заставляет читать текст по символам, а не по единицам кода, — именно поэтому \p{L} и подобные работают как заявлено. Добавьте i, чтобы игнорировать регистр, m — для якорей строк, s — чтобы точка совпадала с переносом строки. Очистите поле, чтобы компилировать без флагов. Любая другая буква отклоняется, а не игнорируется: шаблон, запущенный с флагами, которых вы не просили, тихо означает другое.
В какой частоте кадров считается тайминг. На страницах форматов это то, что нужно MicroDVD: он хранит время в номерах кадров. На страницах частоты кадров это частота, по которой файл был рассчитан, — версия, для которой делались субтитры, — а второе поле страницы принимает частоту видео, с которым вы будете их использовать. Обычные значения: 23,976, 24, 25, 29,97, 30, 50, 59,94 и 60. Ошибка сдвигает весь таймлайн, а на страницах частоты кадров — на коэффициент, а не на фиксированную величину.
Заполните Шаблон, чтобы запустить.
Эта страница переписывает текст реплик по шаблону, который вы пишете сами: \d+ означает любую последовательность цифр, (cat|dog) — одно из двух слов, а точка — любой символ, поэтому замена идёт не по буквальному совпадению, а по программе. Меняется только текст: время начала и конца каждой реплики переносится без изменений. В поле замены $1 подставляет первую группу в скобках, $& — всё совпадение, а $$ — знак доллара, так что одно правило может убрать лишний пробел перед точкой, сохранив саму пунктуацию.
По умолчанию включены флаги g и u; i добавляет игнорирование регистра, m разрешает якорям работать по строкам, s позволяет точке совпадать с переносом строки, а незнакомая буква в поле флагов отменяет весь запуск. Курсив и другие стили переносятся, пока для них есть честное место; тег, через край которого прошло совпадение, удаляется и попадает в отчёт о потерях.
Примеры
Сохраняем пунктуацию группой
Вход
1
00:00:01,000 --> 00:00:02,000
We stopped , and waited .
2
00:00:03,000 --> 00:00:04,000
Right !
Выход
1
00:00:01,000 --> 00:00:02,000
We stopped, and waited.
2
00:00:03,000 --> 00:00:04,000
Right!
Шаблон — это пробелы перед одним из символов . , ! ?, и скобки делают этот знак первой группой, поэтому $1 возвращает его на место. Три совпадения — три изменения; буквальный поиск так не умеет, он может только заменить одну фиксированную строку другой.
Один шаблон, оба написания
Вход
The Colour of the sky.
colourless and calm.
Выход
The color of the sky.
colorless and calm.
С флагом i в поле флагов шаблон colour ловит и написание с заглавной буквы. Обратите внимание, чего флаг не делает: заглавная в начале строки исчезает, потому что шаблон не знает, какую роль слово играет в предложении; если регистр важен, нужно второе правило.
Совпадение пересекает край курсива
Вход
1
00:00:01,000 --> 00:00:04,000
<i>Hello there</i>, welcome aboard
Выход
1
00:00:01,000 --> 00:00:04,000
Hello there. Welcome aboard
Совпадение начинается внутри курсива и заканчивается снаружи, поэтому половина размеченного текста исчезла и тегу больше негде стоять правильно. Он удаляется и считается в потерях, а не остаётся вокруг чужих букв.
Частые вопросы
Как сохранить часть совпадения с помощью групп?
Заключите нужную часть шаблона в скобки и сошлитесь на неё в замене как $1, для второй группы — $2. Например, шаблон \s+([.,!?]) с заменой $1 удаляет пробел и оставляет знак препинания, чего буквальный поиск выразить не может. За $& стоит всё совпадение, а за $$ — сам знак доллара.
С какими флагами выполняется шаблон?
Флаги g и u включены по умолчанию: g находит все совпадения, а не только первое, u заставляет шаблон читать текст посимвольно, из-за чего \p{L} действительно означает букву. Флаг i игнорирует регистр, m разрешает якорям работать по строкам, s позволяет точке совпадать с переносом строки; если очистить поле флагов, останется только g, без которого поиск всех совпадений не работает. Любая другая буква — x, y или d — отменяет запуск целиком, а не игнорируется молча.
Чем эта страница отличается от обычной замены текста?
Обычная замена ищет символы ровно так, как они написаны, поэтому единственная её неудача — ноль совпадений. Здесь выполняется программа: она может задеть тысячи мест за один проход и переписать их все, поэтому поле шаблона открывается пустым, незнакомые флаги отклоняются, а опасные вложенные повторы вроде (a+)+ блокируются до запуска.
Что происходит, когда два совпадения пересекаются?
Побеждает самое левое, и сканирование продолжается после него — так работает любой движок регулярных выражений, включая JavaScript. Поэтому aa в строке aaaa даёт два совпадения, а не три, и после замены получается bb; если вы ждали три, шаблон описывает то, чего движок сделать не может.
Защищает ли страница от медленного или опасного шаблона?
Одну семью шаблонов она отклоняет до запуска: повтор, надетый на группу, которая уже повторяется без предела, вроде (a+)+ или (\d+)+. Три формы не отлавливаются, и их стоит избегать вручную: перекрывающиеся варианты внутри повтора вроде (a|a)+, несколько перекрывающихся повторов подряд вроде a*a*a*b и огромные счётчики вроде (a{100}){100}. Проверка по часам не делается, иначе один и тот же файл давал бы разный результат на быстрой и медленной машине.
Что происходит с курсивом и караоке при замене по регулярному выражению?
Тег снаружи правки сдвигается вместе с текстом, а тег, охватывающий правку, растягивается или сжимается. Если совпадение пересекает край тега, честного места для разметки не остаётся: тег удаляется, и отчёт о потерях говорит, сколько их было. Караоке-диапазон удаляется всякий раз, когда совпадение его касается, потому что послоговая разбивка после этого не совпадает с текстом.