2011-05-13 67 views
0
alertsystem.notification = {"msgId":"1","msgTitle":"Message","msgBody":"No new message.","msgLink":"","msgImage":""}; 

我想在上面的代碼中匹配以下變量的值。直到上週我一直在使用這種模式preg_match('#(\[\{.*?\}\])#s', $html, $match);然後停止工作。修復正則表達式更精確

有沒有辦法在模式中包含alertsystem.go =,這樣我肯定會得到一個匹配?

+5

這是JSON嗎?如果是這樣,你是否考慮過裁剪數據部分和'json_decode()'? – 2011-05-13 09:04:05

+0

您是否嘗試過在正則表達式中包含新的前綴? – mario 2011-05-13 09:05:40

+0

對於調試正則表達式,我建議您查看http://weitz.de/regex-coach/,它具有一些非常好的功能,並在Linux下的Wine下工作。 – Treffynnon 2011-05-13 09:06:50

回答

0

你想要preg_match_all,然後看看$matches[0]。您的正則表達式還可以是:#alertsystem\.notification\s*\=\s*\{.*?\}#is

在適當的位置添加括號以捕獲特定部分。

+0

我嘗試將'()'放在正則表達式模式的各個部分,但我只能讓它返回整個字符串。我可以在哪裏放置它,以便它只返回「msgTitle」的值:「消息」,「msgBody」:「沒有新消息。」,「msgLink」:「」'消息「,」沒有新消息。 「和」「 – sarsar 2011-05-13 09:32:45

+0

而不是'{。*?\}'使用'{(。*?)\}'然後'var_dump($ matches);'查看捕獲的匹配項。不能被打擾....哦等等..看..好吧:他們會在$匹配[1]。http://uk2.php.net/manual/en/function.preg-match-all .PHP – 2011-05-13 13:04:51