1

http://gskinner.com/RegExr/?355lr

その正規表現で正常に動作します。次のように preg_match() に挿入すると:

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

常に 0 を返します。

preg_match() がパターンがフォーマットされることを期待する方法と関係があると思いますか?

4

3 に答える 3

1

「?」を使用したため、代わりにこの正規表現を使用してみてください。貪欲さを切り替えるには:

$reason = preg_match('/(?<=error\: )(.*)(?=\; Request)/', $message);`
于 2013-06-08T12:21:19.990 に答える
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)
于 2013-06-08T12:30:14.800 に答える
1

あなたの問題は正規表現自体にあるとは思いませんが、;エスケープ:する必要はありません。ただし、これを使用することをお勧めします:

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

$reasonの場所に注意してください

于 2013-06-08T12:52:43.667 に答える