我被困在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