Тег 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
)
)
Вы можете использовать положительный взгляд на соответствие \$
буквально или конец строки, как
(\$[a-z]{1})(.*?)(?=\$|$)
Код 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);
НОТА : — Ваш требуемый результат в Array[1]
а также Array[2]
, Array[0]
зарезервировано для совпадения, найденного всем регулярным выражением.
Я думаю, что достаточно простого регулярного выражения
$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);