分隔符之间的PHP正则表达式


php regex between delimiter chars

我正在努力寻找解决这个问题的方法。我有一个像这样的字符串"&M26&M35.45#&TN#&C150,250,10# f54f#"我想把它转换成一个数组包含所有在'&'和'#'之间的匹配项。所以在我的场景中,我想要

0: M35.45
1: TN
2: C150,250,10

我试着用一个正则表达式

$haystack = "&M26&M35.45#&TN#&C150,250,10# f54f#";
if (preg_match_all("/(?<=&).*?(?=#)/s", $haystack, $result))
print_r($result[0]);

但是这样我得到:

0: M26&M35.45
1: TN
2: C150,250,10

如果你看到,第一个匹配包含一些我不需要的字符。我想让分隔符之间的匹配最短但我不知道怎么做。谢谢你!

当你说"我不需要这个字符" -你应该从你的选择中排除这个字符。即[^&]。得到的正则表达式如下:

/(?<=&)[^&]*?(?=#)/s

新结果为:

Array
(
    [0] => M35.45
    [1] => TN
    [2] => C150,250,10
)