Выберите запятые без скобок и без кавычек - PullRequest
0 голосов
/ 11 декабря 2018

Когда я использую preg_split с

/['\"][^'\"\\\\]*(?:\\\\,[^'\"\\\\]*)*['\"](*SKIP)(?!)|\,/

для

max(min(2, 3, 5, 19, 5), 2)

, он разделяется как

    [0] => min(2
    [1] =>  3
    [2] =>  5
    [3] =>  19
    [4] =>  5)
    [5] =>  2

Я хочу выбрать не скобки и не кавычкизапятая.Итак:

[0] => min(2, 3, 5, 19, 5)
[1] => 2

1 Ответ

0 голосов
/ 11 декабря 2018

Договорились об использовании для этого метода без регулярных выражений, так как это может быть слишком громоздким.Но если вам интересно, читайте дальше.

Технически запятая, которую вы хотите найти , равна в группе скобок, заключенных в max().Если вы когда-нибудь захотите заглянуть внутрь одной функции верхнего уровня, вы можете использовать что-то вроде этого:

(?:^max\\(|(([\'\"])(?:\\\\.|(?!\\g{-1}).)*+\\g{-1})|\\((\\\\.|(?1)|[^()\'\"]|\\((?-1)*+\\))*+\\))(*SKIP)(?!)|,

Демонстрация: https://regex101.com/r/O7kFRc/1

Если могут быть другиефункции уровня, такие как max(a, b) + min(c, d), тогда должны использоваться другие методы.Но пока нет необходимости открывать эту банку с червями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...