regex — различия в обратном слэше между Notepad ++ и переполнением стека

РЕДАКТИРОВАТЬ: я нашел решение, которое я не ожидал. Увидеть ниже.

Используя regex через PHP preg_match_all, я хочу сопоставить определенный URL (EDIT: это уже экранировано) в строке, отформатированной как json. Поиск прекрасно работает в Notepad ++ (конечно, с использованием регулярных выражений), но preg_match_all() просто возвращает пустой массив.

Тестирование на tryphpregex.com Я обнаружил, что каким-то образом мой обычный подход к экранированию от обратной косой черты дает ошибку шаблона, то есть даже простой шаблон https:\\ возвращает пустой результат.

Я совершенно сбит с толку и пытаюсь отлаживать слишком долго, поэтому я могу упустить очевидное. Может быть, один из вас может увидеть простую ошибку?

Строка.

Шаблон (который отлично работает в Notepad ++, но не в PHP):

%(https:\\/\\/play.spotify.com\\/track\\/)(.*?)(\")%

1

Решение

Вам не нужно избегать косой черты в PHP %(https://play.spotify.com/track/)(.*?)(\")%

Обратная косая черта перед двойными кавычками необходима только в том случае, если вложения тоже являются двойными кавычками.

2

Другие решения

Нашел решение моей проблемы.

В соответствии с этот сайт, Мне нужно сопоставить каждую обратную косую черту с \\\\, Ужасно, но верно.

Так что мой шаблон становится:

$pattern = "%(https:\\\\/\\\\/play\.spotify\.com\\\\/track\\\\/)(.*?)(\")%";

Обратите внимание, что я попытался найти шаблон внутри строки, которая не содержала четких URL-адресов, но URL-адреса, содержащие escape-символы (это был вывод json из spotify)

0

По вопросам рекламы [email protected]