regex — Как получить все данные доллара и текст после него в строке в переполнении стека

Тег marc 21 может содержать строку с несколькими знаками доллара, например:

$string='10$athis is text a$bthis is text b/$cthis is text$dthis is text d';

Я пытался сопоставить все поет доллар и получить текст после каждого пения, мой код:

preg_match_all("/\\$[a-z]{1}(.*?)/", $string, $match);

выход:

Array
(
[0] => Array
(
[0] => $a
[1] => $b
[2] => $c
[3] => $d
)

[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
)

)

Как можно захватить текст после каждого пения, чтобы на выходе было:

Array
(
[0] => Array
(
[0] => $a
[1] => $b
[2] => $c
[3] => $d
)

[1] => Array
(
[0] => this is text a
[1] => this is text b/
[2] => this is text c
[3] => this is text d
)

)

2

Решение

Вы можете использовать положительный взгляд на соответствие \$ буквально или конец строки, как

(\$[a-z]{1})(.*?)(?=\$|$)

Regex Demo

Код PHP

$re = "/(\\$[a-z]{1})(.*?)(?=\\$|$)/";
$str = "10\$athis is text a\$bthis is text b/\$cthis is text\$dthis is text d";
preg_match_all($re, $str, $matches);

Ideone Demo

НОТА : — Ваш требуемый результат в Array[1] а также Array[2], Array[0] зарезервировано для совпадения, найденного всем регулярным выражением.

3

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

Я думаю, что достаточно простого регулярного выражения

$re = '/(\$[a-z])([^\$]*)/';
$str = "10\$athis is text a\$bthis is text b/\$cthis is text\$dthis is text d";
preg_match_all($re, $str, $matches);
print_r($matches);

DEMO

2

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