РЕДАКТИРОВАТЬ: я нашел решение, которое я не ожидал. Увидеть ниже.
Используя regex через PHP preg_match_all, я хочу сопоставить определенный URL (EDIT: это уже экранировано) в строке, отформатированной как json. Поиск прекрасно работает в Notepad ++ (конечно, с использованием регулярных выражений), но preg_match_all()
просто возвращает пустой массив.
Тестирование на tryphpregex.com Я обнаружил, что каким-то образом мой обычный подход к экранированию от обратной косой черты дает ошибку шаблона, то есть даже простой шаблон https:\\
возвращает пустой результат.
Я совершенно сбит с толку и пытаюсь отлаживать слишком долго, поэтому я могу упустить очевидное. Может быть, один из вас может увидеть простую ошибку?
Шаблон (который отлично работает в Notepad ++, но не в PHP):
%(https:\\/\\/play.spotify.com\\/track\\/)(.*?)(\")%
Вам не нужно избегать косой черты в PHP %(https://play.spotify.com/track/)(.*?)(\")%
Обратная косая черта перед двойными кавычками необходима только в том случае, если вложения тоже являются двойными кавычками.
Нашел решение моей проблемы.
В соответствии с этот сайт, Мне нужно сопоставить каждую обратную косую черту с \\\\
, Ужасно, но верно.
Так что мой шаблон становится:
$pattern = "%(https:\\\\/\\\\/play\.spotify\.com\\\\/track\\\\/)(.*?)(\")%";
Обратите внимание, что я попытался найти шаблон внутри строки, которая не содержала четких URL-адресов, но URL-адреса, содержащие escape-символы (это был вывод json из spotify)