PHP Regex — Разделение строки с разделителем запятыми, IGNORE запятая между тегами

Учитывая эту строку:

$somethingawesome = '<[return date("Y-m-d", strtotime("yesterday"));]>,<[return "cool!";]>,TRUE,foo';

Как я могу получить массив, как это:

Array
(
[0] => <[return date("Y-m-d", strtotime("yesterday"));]>

[1] => <[return "cool!";]>

[2] => TRUE

[3] => foo
)

3

Решение

Исходя из заданной вами строки, вы можете использовать следующее …

$results = preg_split('/(?:<[^>]*>)?\K,/', $str);
print_r($results);

Выход

Array
(
[0] => <[return date("Y-m-d", strtotime("yesterday"));]>
[1] => <[return "cool!";]>
[2] => TRUE
[3] => foo
)

Или, конечно, вы можете сопоставить все вместо использования разделения.

preg_match_all('/<[^>]+>|[^><,]+/', $str, $matches);
4

Другие решения

 ,(?=(?:[^\]\[]*\[[^\]]*\])*[^\]\[]*$)

Попробуйте это. См. Демо. Заменить на \n,

http://regex101.com/r/aT7wM2/1

1

По вопросам рекламы [email protected]