我很难解析包含键值对的字符串,其中包含PHP中的运算符(如下所示)。我打算使用正则表达式来解析它(虽然我不擅长)。
key: "value" & key2 : "value2" | title: "something \"here\"..." &( key: "this value in paranthesis" | key: "another value")
基本上,上述区块中的单位如下
key
- 任何有资格成为javascript变量的内容。value
- 任何长或短的字符串,但用双引号括起来(“”)。 pair
- (key:value
)冒号的键和值,就像在javascript对象中一样。operator
- (&
或|
)只需指出“与”或“或”。可以在prantheses (
和)
中嵌套多个块。
受到Matt的启发(http://stackoverflow.com/questions/2467955/convert-javascript-regular-expression-to-php-pcre-expression)我使用了以下正则表达式。
$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:string和:oneChar但我仍然得到同样的错误。 因此我觉得有一些问题:oneChar reg ex。请帮助我解决这个问题。
答案 0 :(得分:0)
我在第二个正则表达式中看到至少一个错误($ regs [':oneChar'])。它有一个正斜杠。它与preg_match中用作分隔符的正斜杠相冲突。请改用preg_match("@^{$regs[':value']}@", $query, $matches)
。
您可能还需要在输入字符串上使用preg_quote。
$query = preg_quote($query, '/');
除此之外,我会一次运行一个正则表达式,以查看哪一个正在抛出错误。