PHP Regex "Неизвестный модификатор p"

Код PHP Regex

// If url matches regex $regex = "/^(/upload/temporary/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[A-Za-z0-9._ /-]+.[Az]{2,4}$/"; if (preg_match($regex, $this->value)) { $this->valid(); } 

Сообщение об ошибке

 Warning: preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Unknown modifier 'p' in C:\Apache\www\profiletwist\lib\php\form\url.php on line 41 Call Stack # Time Memory Function Location 1 0.0079 440016 {main}( ) ..\new.php:0 2 0.0964 667832 form->validate( ) ..\new.php:60 3 0.0968 668248 form_URL->validateUploadURL( ) ..\form.php:372 4 0.0969 668400 preg_match ( ) ..\url.php:41 Variables in local scope (#3) $regex = string '/^(/upload/temporary/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[A-Za-z0-9._ /-]+.[Az]{2,4}$/' (length=79) 

Вопрос

Как исправить регулярное выражение для этой ошибки «неизвестного модификатора», чтобы не возникало?

в конечном счете, я бы хотел, чтобы регулярное выражение соответствовало текстовому вводу:

 "/upload/temporary/####_##_##_[A-z0-9 _-]+ "." [az]{3} 

Это цель имени файла. Начало не изменяется, и последняя часть может быть случайным хешем, за которым следует произвольное расширение. Дальнейшая обработка выполняется после регулярного выражения, но это первый тест.

Спасибо!

В строке регулярного выражения вы должны избегать разделителей. Или лучше: используйте символ, который не отображается в самом регулярном выражении как разделитель:

другой разделитель ( рекомендуется ) :

 $regex = "#^(/upload/temporary/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[A-Za-z0-9._ /-]+.[Az]{2,4}$#"; 

экранированные разделители :

 $regex = "/^(\/upload\/temporary\/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[A-Za-z0-9._ \/-]+.[Az]{2,4}$/"; 

Вам нужно убрать передние косые черты или просто использовать другой разделитель (я использовал в этом случае):

 $regex = "!^(/upload/temporary/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[A-Za-z0-9._ /-]+.[Az]{2,4}$!" 
 $regex = "~^(/upload/temporary/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[\w./-]+\.[az]{2,4}$~"; 

Измените разделители на ~

Например, если вы используете разделитель, например, / , вы должны избегать всех litteral / в вашем шаблоне otherwhise. Механизм регулярных выражений считает, что это конец шаблона.

Поскольку u является модификатором, а p не является модификатором, у вас есть эта ошибка из-за подстроки /^(/up....