Во втором регулярном выражении вы используете /
в качестве разделителя регулярных выражений, но вы также используете его в регулярном выражении. Компилятор пытается интерпретировать эту часть как полное регулярное выражение:
/\p{Nd}{4}/
Он думает, что следующий символ после второго /
должен быть модификатором, таким как 'u' или 'm', но вместо этого он видит обратную косую черту, поэтому он создает это загадочное исключение.
В первом регулярном выражении вы используете круглые скобки в качестве разделителей регулярных выражений; если вы хотите добавить модификатор u
, вы поместите его после закрывающей скобки:
'(\p{Nd}{4}/\p{Nd}{2}/\p{Nd}{2}/\p{L}+)u'
Хотя в качестве разделителей регулярных выражений допустимо использовать скобки или другие символы в скобках ({}
, []
, <>
), это не очень хорошая идея IMO. Большинство людей предпочитают использовать один из менее распространенных знаков препинания. Например:
'~\p{Nd}{4}/\p{Nd}{2}/\p{Nd}{2}/\p{L}+~u'
'%\p{Nd}{4}/\p{Nd}{2}/\p{Nd}{2}/\p{L}+%u'
Конечно, вы также можете избежать косой черты в регулярном выражении с помощью обратной косой черты, но зачем беспокоиться?