Я не видел, чтобы кто-то напрямую обращался к ошибке PHP, поэтому я попытаюсь объяснить.
Причиной ошибки "Неизвестный модификатор" ['"является то, что вы забыли обернуть свое регулярное выражение в разделители. PHP просто принимает первый символ в качестве разделителя, если это не алфавитно-цифровой, не пробельный символ ASCII. Итак, в вашем регулярном выражении:
preg_match("(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+", $subject, $matches);
PHP думает, что вы имели в виду (
как начальный разделитель. Затем он находит то, что он считает вашим закрывающим разделителем, следующий )
и предполагает, что следующие являются модификаторами шаблона. Однако он обнаруживает, что ваш первый модификатор шаблона, следующий символ после первого )
, имеет значение [
. [
явно не является допустимым модификатором шаблона, поэтому вы получаете сообщение об ошибке.
Решение состоит в том, чтобы просто обернуть свое регулярное выражение в разделители и убедиться, что любые разделители внутри регулярного выражения, которым вы хотите соответствовать, буквально экранированы. Мне нравится использовать ~
в качестве разделителей, т.к. вам редко требуется совпадать с литералом ~
в регулярном выражении.