http://gskinner.com/RegExr/?355lr
その正規表現で正常に動作します。次のように preg_match() に挿入すると:
$reason = preg_match('/(?<=error\: )(.*?)(?=\; Request)/', $message);
常に 0 を返します。
preg_match() がパターンがフォーマットされることを期待する方法と関係があると思いますか?
http://gskinner.com/RegExr/?355lr
その正規表現で正常に動作します。次のように preg_match() に挿入すると:
$reason = preg_match('/(?<=error\: )(.*?)(?=\; Request)/', $message);
常に 0 を返します。
preg_match() がパターンがフォーマットされることを期待する方法と関係があると思いますか?
「?」を使用したため、代わりにこの正規表現を使用してみてください。貪欲さを切り替えるには:
$reason = preg_match('/(?<=error\: )(.*)(?=\; Request)/', $message);`
私には大丈夫そうです。$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)
あなたの問題は正規表現自体にあるとは思いませんが、;
エスケープ:
する必要はありません。ただし、これを使用することをお勧めします:
if (preg_match('~error: \K[^;]++(?=; Request)~', $message, $reason))
print_r($reason);
$reasonの場所に注意してください