Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > RegExp > Регулярное выражение для замены всех таймкодов в строке (на PHP)


Автор: ViH 18.03.24, 13:20
Подскажите, пожалуйста, регулярное выражение замены всех таймкодов (чисел, разделённых двоеточиями) таким образом:

Исходная строка:
Lorem 1:06:16 ips48:5um.

После замены:
Lorem <span class="time">1:06:16</span> ips<span class="time">48:5</span>um.

p. s. Это нужно для PHP скрипта.

Автор: Majestio 19.03.24, 08:01
Смотри тут.

Автор: ViH 19.03.24, 08:56
Спасибо, но работает только если в строке два таймкода. В моем случае в строке могут быть десятки таймкодов. Как это учесть? Прошу прощения за глупый вопрос, но никак не найду времени изучить регулярные выражения.

Автор: Majestio 19.03.24, 10:10
Цитата ViH @
Спасибо, но работает только если в строке два таймкода.

Приведи пример с 3 и 4-мя таймкодами.

Автор: ViH 19.03.24, 12:08
Например, такая строка:
1:10 - some text<br>
1:20 - some text<br>
1:30 - some text<br>
1:40 - some text<br>

После замены:
<span class="time">1:10</span> - some text<br>
<span class="time">1:20</span> - some text<br>
<span class="time">1:30</span> - some text<br>
<span class="time">1:40</span> - some text<br>

Автор: Majestio 19.03.24, 13:45
Ну это совершенно разные форматы строк. Проще на каждый формат делать свою регулярку и пробовать их в цикле перебора строк применять последовательно. Были бы более-менее схожие форматы - можно было бы делать одну более универсальную регулярку. На этот формат строк будет другая регулярка.

Стоп, я понял о чем речь ... Секунду.

Автор: Majestio 19.03.24, 14:05
Лови пример на PHP:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <?php
    $str1 = "Lorem 1:06:16 ips48:5um.";
    $str2 = "1:10 - some text<br>";
     
    $replacement = '<span class="time">$0</span>';
     
    $new1 = preg_replace('/\d+:\d+(:\d+)?/', $replacement, $str1);
    $new2 = preg_replace('/\d+:\d+(:\d+)?/', $replacement, $str2);
     
    echo "$new1\n";
    echo "$new2\n";
    ?>

Онлайн тест.

Автор: ViH 19.03.24, 14:21
Огромнейшее Спасибо! Работает как надо!!!

Там в примере одна строка, просто я её записал в несколько. Прошу прощения за путаницу:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    $str = "1:10 - some text<br>1:20 - some text<br>1:30 - some text<br>1:40 - some text<br>";
    $replacement = '<span class="time">$0</span>';
    $res = preg_replace('/\d+:\d+(:\d+)?/', $replacement, $str);
    echo ($res);

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)