1

我正在尝试找到解决此问题的方法。我有一个像“&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

如果您看到,第一个匹配项包含一些我不需要的字符。所以我试图在我的分隔符之间获得最短的匹配,但我不知道如何。谢谢!

4

1 回答 1

2

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

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

新结果是:

Array
(
    [0] => M35.45
    [1] => TN
    [2] => C150,250,10
)
于 2015-07-21T15:37:20.123 回答