2013-06-08 4 views
1

http://gskinner.com/RegExr/?355lrПочему этот шаблон не работает в preg_match()?

Он отлично работает в этом регулярном выражении. Если вставить его в мой preg_match(), как это:

$reason = preg_match('/(?<=error\:)(.*?)(?=\; Request)/', $message); 

он всегда возвращает 0.

Я предполагаю, что его что-то делать с тем, как preg_match() ожидает шаблон для форматирования?

+0

Это работает хорошо для меня. – Toto

+0

Кажется, у меня была парадная новая строка, которая не была в примере regexr, но выводилась из моей ошибки. Благодарю. –

ответ

1

Кажется, все в порядке. Убедитесь, что $ message не сбрасывается или не отличается каким-либо образом с этим регулярным выражением.

$message = 'Request have return error: Invalid email syntax; Request: {"jsonrpc":"2.0","method":"add_contact","params":["420a42ea1685c9a273f26378aa82081b",{"campaign":"nfzM","name":"Chris Allen","email":"eric","ip":"127.0.0.1","customs":[{"name":"phone","content":"123456"},{"name":"address","content":"123 Fake Street"},{"name":"city","content":"Chicago"},{"name":"state","content":"IL"},{"name":"zipcode","content":"0001"},{"name":"country","content":"United States"},{"name":"company_name","content":"Acme"},{"name":"store_url","content":"http:\/\/www.google.com"},{"name":"timestamp","content":"06.10.13"},{"name":"subscriber_ip","content":"127.0.0.1"}]}],"id":2};'; 

$reason = preg_match('/(?<=error\:)(.*?)(?=\; Request)/', $message); 

var_dump($reason); 

дает ответ:

int(1) 
1

Попробуйте использовать это регулярное выражение, потому что вы использовали '?' для переключения жадности:

$reason = preg_match('/(?<=error\:)(.*)(?=\; Request)/', $message);` 
1

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

if (preg_match('~error: \K[^;]++(?=; Request)~', $message, $reason)) 
    print_r($reason); 

Примечание где это $ причина

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