2015-07-21 98 views
1

我试图找到解决这个问题的方法。 我有这样的“& M26 & M35.45#& TN#& C150,250,10#f54f#” 一个字符串,我希望把它改造成一个包含所有那些“&”之间的匹配数组和'#'。所以在我的情况我想有定界符字符之间的PHP正则表达式

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 

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

回答

2

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

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

新的结果是:

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

你说得对,我没有这样想过,谢谢 – Andrex

相关问题