Я попытался найти ответ на этот вопрос, но я не мог найти ничего слишком полезного в этой ситуации. Возможно, я не ищу правильные условия.Regex - игнорировать определенные символы в кавычках
У меня возникли проблемы с этим регулярным выражением. Рассмотрим эту строку:
$str = "(1, 2, 'test (foo) bar'), (3, 4, '(hello,world)')";
Я хочу, чтобы в конечном итоге с многомерного массива, например:
$arr = array(
array(1, 2, 'test (foo) bar'),
array(3, 4, '(hello,world)')
);
Я полагаю, что я мог бы запустить регулярное выражение, чтобы разбить его на отдельные строки, как «(1, 2 , 'test (foo) bar') "и" (3, 4, '(hello, world)') ", а затем запустить регулярное выражение для каждого из них для разделения по запятой, но, как вы видите, моя проблема заключается в том, что данные имеют скобки и запятые в разных строках, и я хотел бы игнорировать их.
До сих пор у меня есть это, что делает первую часть, как я хотел, за исключением случаев, когда в данных есть скобки, затем она ломается.
preg_match_all('/\((.*?)\),?/', $str, $matches);
Это дает мне это:
Array
(
[0] => Array
(
[0] => (1, 2, 'test (foo)
[1] => (3, 4, '(hello,world)
)
[1] => Array
(
[0] => 1, 2, 'test (foo
[1] => 3, 4, '(hello,world
)
)
Он отсекает данные, естественно. Что я могу сделать, чтобы игнорировать круглые скобки, заключенные в кавычки? Если я могу игнорировать их, то на следующем шаге, когда я разберу каждый из этих совпадений, я смогу игнорировать запятые.
Спасибо!
это работает, когда данные строки, но он не на струнах, как: –
(1, 1), (5, 0), (10, 0), (14, 1), (15, 0), (20, 1), (25, 0), (29, 1), (39, 0) –
Попробуйте это (([^ "] *? *.?) \\) | \\ (([^?] *) \\) ,? – Max