(name eq "xxxx" and user:(post.id eq 6 and post.post eq "testing") and data eq "Hello World!")
У меня есть эта строка выше, и я хочу отфильтровать ее через RegEx, чтобы получить следующий вывод:
[
[
"name eq "xxxx"",
"user" => [
"post.id eq 6",
"post.post eq testing",
],
"data eq "Hello World!"",
],
[
"name",
"user" => [
post.id,
post.post
],
"data",
],
]
Я пробовал следующее решение для регулярных выражений
/([\\w\\.]+)[\\s]+(?:eq)[\\s]+(?:"(?:[^"\\\\]|\\\\.)*"|\\d+(?:,\\d+)*(?:\\.\\d+(?:e\\d+)?)?|null)/i
И получил значение
[
[
"name eq "xxxx"",
"post.id eq 6",
"post.post eq "testing"",
],
[
"name",
"post.id",
"post.post",
],
]
@Kyslik Я тебя не понял?
@revo Было бы хорошо сейчас?
Редко люди заботятся. Проголосовали.
Спасибо за помощь. Очень признателен. @revo
Вы добавили попытку, но не добавили фактические потребности, и мы не знаем, почему вы выбрали именно этот шаблон, а не другой. Вопрос все еще неясен / слишком широк. Каковы спецификации формата входной строки? Я сомневаюсь, что вы можете сделать это с помощью регулярного выражения, если вы не уверены, что есть статические элементы, на которые всегда можно положиться при извлечении. Обычно для такого рода текстов пишут парсеры.






попробуйте это, я не проверяю регулярное выражение, хотя
$input = "(name eq \"xxxx\" and user:(post.id eq 6 and post.post eq \"testing\") and data eq \"Hello World!\")";
$inarr = [":(", ")","("];
$reparr = [" and ", "", ""];
$input=str_replace($inarr, $reparr, $input);
$resultarr = explode(" and ", $input);
echo '[
[
$resultarr[0]' . ',' .
'"' . $resultarr[1] . '" => [' .
$resultarr[2] . ',' .
$resultarr[3] . ',' .
'],
"' . $resultarr[4] . '",
],
[
"name",
"user" => [
post.id,
post.post
],
"data",
],
]';
Ты много хочешь.