Преобразование строки в RegEx

(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 08.05.2018 11:59
Переполнение стека не приветствуется. Найдите время, чтобы прочитать страницы помощи, особенно разделы с названиями "Какие темы я могу спросить здесь?" и «Какие типы вопросов мне следует избегать?». Также пожалуйста взять тур и читай о том, как задавать хорошие вопросы. Наконец, узнайте, как создать Минимальный, полный и проверяемый пример.
revo 08.05.2018 12:00

@Kyslik Я тебя не понял?

Shwetank 08.05.2018 12:02

@revo Было бы хорошо сейчас?

Shwetank 08.05.2018 12:08

Редко люди заботятся. Проголосовали.

revo 08.05.2018 12:09

Спасибо за помощь. Очень признателен. @revo

Shwetank 08.05.2018 12:10

Вы добавили попытку, но не добавили фактические потребности, и мы не знаем, почему вы выбрали именно этот шаблон, а не другой. Вопрос все еще неясен / слишком широк. Каковы спецификации формата входной строки? Я сомневаюсь, что вы можете сделать это с помощью регулярного выражения, если вы не уверены, что есть статические элементы, на которые всегда можно положиться при извлечении. Обычно для такого рода текстов пишут парсеры.

Wiktor Stribiżew 08.05.2018 19:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
7
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

попробуйте это, я не проверяю регулярное выражение, хотя

$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",
 ],
]';

Другие вопросы по теме