2013-03-12 5 views
1

В чем смысл предупреждения?Может ли кто-нибудь объяснить это предупреждение?

Warning: preg_replace() [function.preg-replace]: Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1 in 

Это время запускается с помощью этой функции:

file_put_contents($file,preg_replace('(\uid=\d+)', 'uid=' . $uid, file_get_contents($file))); 

именно эта картина:

'(\uid=\d+)' 

Она работает локально, но не в Интернете, а это означает, что, вероятно, версия моего хозяина РНР. Я пытался работать с Google, но ничего не могу найти.

+0

Это недопустимый шаблон. вы забыли разделители, например. '/ (\ uid ....'. –

+0

@MarcB - '()' на самом деле являются действительными разделителями. –

+0

@Marc B: '(' и ')' являются действительными разделителями тоже AFAIK, но это мешает вам использовать скобки в шаблоне, поэтому обычно это нехороший выбор. –

ответ

5

PCRE не поддерживает последовательность espace \u.

Иными словами, ваше регулярное выражение неверно. Вместо этого попробуйте что-то вроде (uid=\d+).

Как сказано в комментариях (спасибо Mellamokb), вот source.

Если вы хотите знать, что такое \u, вы можете посмотреть here

\ и Titlecase следующий символ. Не в [ ].

+0

+1 Источник: http://www.php.net/manual/en/reference.pcre.pattern. difference.php, # 5. – mellamokb

+0

Работал в первый раз! Спасибо всем. – Starkers

+0

@ JWH Добро пожаловать. Regex всегда несколько сложны, когда вы не привыкли к ним :) – Geoffroy

0
file_put_contents($file,preg_replace('/uid=\d+/', 'uid=' . $uid, file_get_contents($file))); 
0

модель RegExp должна быть ограничена / разделителями, вы можете также использовать (# или ~). Кроме того, нет escape-последовательности \u. Вы можете попробовать это -

preg_replace('/\\uid=\d+/', 'uid=' . $uid, file_get_contents($file)) 
Смежные вопросы