Я застрял при разборе строки, содержащей пары ключ-значение с операторами между ними (как показано ниже) в PHP. Я планирую использовать регулярное выражение для его анализа (хотя я не очень хорош).
key: "value" & key2 : "value2" | title: "something \"here\"..." &( key: "this value in paranthesis" | key: "another value")
В основном, в приведенном выше блоке указаны следующие единицы:
key
- Все, что квалифицируется как переменная javascript.
value
- любая строка длинная или короткая, но заключенная в двойные кавычки ("").
pair
- (key:value
) Ключ и значение, объединенные двоеточием, как в объектах javascript.
operator
- (&
или |
) Просто указывает «И» или «ИЛИ».
Может быть несколько блоков, вложенных в скобки (
и )
.
Вдохновленный Мэттом (/2021095/preobrazovanie-regulyarnogo-vyrazheniya-javascript-v-vyrazhenie-php-pcre) Я использовал следующие регулярные выражения.
$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. Пожалуйста, помогите мне в решении этой проблемы.