2015-01-23 4 views
0

У меня есть следующая строка кода.PHP-разделители при использовании preg_match

if (!preg_match('^(' . $value . ')(;q=[0-9]\\.[0-9])?$', $this->browser_languages[$i]) && isset($this->catalog_languages[$key])) {  
    $this->language = $this->catalog_languages[$key]; 
    break 2; 

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

Пожалуйста, кто-нибудь может помочь.

Благодаря

+4

Покажите, как вы пытались добавить разделители, также отправляйте точное сообщение об ошибке – Rizier123

+0

RTFM? http://php.net/manual/en/regexp.reference.delimiters.php –

+0

Благодарим вас за помощь. Я думаю, я пытался добавить «^» в качестве делиметра. –

ответ

0

Вы хотите '!^(' . $value . ')(;q=[0-9]\\.[0-9])?$!' Я добавил ! в качестве первого символа в регулярном выражении, и последним.

Разделив строку таким образом, вы можете добавить модификаторы шаблонов.

0

С разделителями:

!preg_match('/^(' . $value . ')(;q=[0-9]\\.[0-9])?$/', $this->browser_languages[$i]); 

И цитата $value:

preg_quote($value, '/'); 

Полный код:

if (!preg_match('/^(' . preg_quote($value, '/'). ')(;q=[0-9]\\.[0-9])?$/', $this->browser_languages[$i]) && isset($this->catalog_languages[$key])) {  
    $this->language = $this->catalog_languages[$key]; 
    break 2; 
0

Вам нужно добавить разделители в начале и в конце регулярного выражения :

'/^(' . $value . ')(;q=[0-9]\\.[0-9])?$/'

Вы также можете использовать preg_quote($value) в том случае, если значение имеет специальные символы, что может испортить ваше регулярное выражение и вызвать ошибку.

Смежные вопросы