J'ai essayé de chercher la réponse à cette question, mais je n'ai rien trouvé d'utile dans cette situation. Il est possible que je ne cherche pas les termes corrects.Regex - ignorer certains caractères entre guillemets
J'ai des problèmes avec cette regex. Considérez cette chaîne:
$str = "(1, 2, 'test (foo) bar'), (3, 4, '(hello,world)')";
Je veux finir avec un tableau multidimensionnel, comme ceci:
$arr = array(
array(1, 2, 'test (foo) bar'),
array(3, 4, '(hello,world)')
);
Je me dis que je pouvais courir un regex à scinder en différentes chaînes comme « (1, 2 , 'test (foo) bar') "et" (3, 4, '(bonjour, monde)') ", puis exécutez une regex sur chacun de ceux à diviser par une virgule, mais comme vous pouvez le voir, mon problème est le les données ont des parenthèses et des virgules dans diverses chaînes, et j'aimerais les ignorer.
Jusqu'à présent, j'ai ceci, qui fait la première partie comme je le voulais, sauf s'il y a des parenthèses dans les données, alors ça casse.
preg_match_all('/\((.*?)\),?/', $str, $matches);
Il me donne ceci:
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
)
)
Il tronque les données, naturellement. Que puis-je faire pour ignorer les parenthèses qui sont entre guillemets? Si je peux les ignorer, alors à l'étape suivante lorsque je diviserai chacun de ces matchs, je serai en mesure d'ignorer les virgules.
Merci!
cela fonctionne lorsque les données a des cordes, mais il échoue sur les chaînes comme: –
(1, 1), (5, 0), (10, 0), (14, 1), (15, 0), (20, 1), (25, 0), (29, 1), (39, 0) –
Essayez celui-ci \\ (([^ '] *?'. *? ') \\) | \\ (([^'] *?) \\) ,? – Max