我被困在PHP中解析包含鍵值對與運算符之間的字符串(如下所示)。我打算用用戶正則表達式來解析它(儘管我不擅長)。在PHP中使用正則表達式解析塊
key: "value" & key2 : "value2" | title: "something \"here\"..." &(key: "this value in paranthesis" | key: "another value")
基本上是在上述塊中的單元如下
key
- 任何有資格成爲一個JavaScript變量。value
- 任何長或短的字符串,但用雙引號(「」)括起來。pair
- (key:value
)一個鍵和值組合在一起就像在javascript對象中一樣。operator
- (&
或|
)只需指示'AND'或'OR'。
可以有多個塊嵌套在凹口(
和)
中。
從馬特受到啓發我已經使用了下面的正則表達式。
$regs[':number'] = '(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)'; $regs[':oneChar'] = '(?:[^\\0-\\x08\\x0a-\\x1f\"\\\\]|\\\\(?:[\"/\\\\bfnrt]|u[0-9A-Fa-f]{4}))'; $regs[':string'] = '(?:\"'.$regs[':oneChar'].'*\")'; $regs[':varName'] = '\\$(?:'.$regs[':oneChar'].'[^ ,]*)'; $regs[':func'] = '(?:{[ ]*'.$regs[':oneChar'].'[^ ]*)'; $regs[':key'] = "({$regs[':varName']})"; $regs[':value'] = "({$regs[':string']})"; $regs[':operator'] = "(&|\|)"; $regs[':pair'] = "(({$regs[':key']}\s*:)?\s*{$regs[':value']})"; if(preg_match("/^{$regs[':value']}/", $query, $matches)) { print_r($matches); }
當執行上面的,PHP拋出一個錯誤附近的IF條件
Warning: preg_match() [function.preg-match]: Unknown modifier '\' in /home/xxxx/test.xxxx.com/experiments/regex/index.php on line 23
我試圖與到的preg_match:字符串:oneChar但我仍然得到同樣的錯誤。 因此,我覺得在oneChar reg前例中有問題。請幫助我解決這個問題。
切勿使用正則表達式進行解析! – 2011-03-31 16:38:27
因爲你可以[有這樣的故障SO用戶](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)。 – gideon 2011-03-31 16:42:48
Hi @ SK-logic和@giddy,由於這是我第一次與解析工作,我不知道使用不同的方法。我很想知道其他解析方法。 – Goje87 2011-03-31 18:17:14