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

时间:2015-07-21 15:27:56

标签: php regex delimiter shortest

我正在尝试找到解决此问题的方法。 我有一个这样的字符串"& 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

如果你看,第一场比赛包含一些我不需要的角色。 所以我试图在我的分隔符之间进行最短的匹配,但我不知道如何。谢谢!

1 个答案:

答案 0 :(得分:2)

当您说“我不需要此角色”时 - 您应该从您的选择中排除该角色。即,[^&]。你得到的正则表达式是:

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

新结果是:

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