PCRE Regex - замена URL в сериализованных строках - PullRequest
0 голосов
/ 02 октября 2018

Я перевожу несколько сайтов на разные URL-адреса, хотя я заметил, что в базе данных много сериализованных записей, содержащих URL-адреса.Я нашел относительно простое регулярное выражение для соответствия строке, начинающейся с URL, но это не всегда так.Вот регулярное выражение, которое я использую.

s:(\d+?):\\\"(https?:\/\/)?example\.com

это прекрасно согласуется с чем-то вроде: s:15:\"http://example.com\", но если между ним есть что-то вроде: s:15:\"foo bar example.com\" (только примеры в этом случае) Я попытался добавить что-то вроде .*? здесь, чтобысовпадение для символов между ними, но тогда регулярное выражение слишком ловит.

tl; д-р, как мне перестать ловить регулярные выражения?Вот регулярное выражение, которое я использую против фиктивного образца.https://regex101.com/r/3GRdLO/1

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете сопоставить любой текст, кроме двойной кавычки между s:(\d+):\\\" и остальной частью шаблона:

s:(\d+):\\\"[^\\]*(?:\\(?!\")[^\\]*)*?(https?:\/\/)?example\.com

См. Демонстрационную версию regex .

Добавлен шаблон: [^\\]*(?:\\(?!\")[^\\]*)*?:

  • [^\\]* - любые 0+ символов, кроме \
  • (?:\\(?!\")[^\\]*)*? - 0+ случаев, как можно меньше,следующей последовательности:
    • \\ - обратный слеш
    • (?!\") - без двойной кавычки
    • [^\\]* - любые 0+ символов кроме \
...