2013-07-12 16 views
0

我在我的PHP代码中的正则表达式应该每个数字和所有的“运营商” +匹配 - */^ R()我的正则表达式看起来像这样PHP正则表达式意外的比赛

/(?:(\d+(?:\.\d+)|(\+)|(-)|(\*)|(\/)|(\^)|(r)|(\()|(\))))/

和测试时以字符串preg_match_all($expression,"2+2",$results)它给我回

Array 
(
    [0] => Array 
     (
      [0] => '+' 
     ) 

    [1] => Array 
     (
      [0] => '' 
     ) 

    [2] => Array 
     (
      [0] => '+' 
     ) 

    [3] => Array 
     (
      [0] => '' 
     ) 

    [4] => Array 
     (
      [0] => '' 
    ) 

    [5] => Array 
     (
      [0] => '' 
     ) 

    [6] => Array 
     (
      [0] => '' 
     ) 

    [7] => Array 
     (
      [0] => '' 
     ) 

    [8] => Array 
     ( 
      [0] => '' 
     ) 

    [9] => Array 
     (
      [0] => '' 
     ) 

) 

当(如果它的工作原理右)我应该得到这个

Array 
(
    [0] => Array 
     (
      [0] => '2' 
      [1] => '+' 
      [2] => '2' 
     ) 

    [1] => Array 
     (
      [0] => '2' 
      [1] => '' 
      [2] => '2' 
     ) 

    [2] => Array 
     (
      [0] => '' 
      [1] => '+' 
      [2] = > '' 
     ) 

    [3] => Array 
     (
      [0] => '' 
      [1] => '' 
      [2] => '' 
     ) 

    [4] => Array 
     (
      [0] => '' 
      [1] => '' 
      [2] => '' 
     ) 
    ... 

) 

注意,它返回类似行为对于所有的运营商,它似乎忽略的数字完全

注意,我确实需要单独的捕捉组,所以我有不同的匹配指标。对于每个结果

+1

这是什么目标? “ –

+0

”应该匹配每个数字和所有“运算符”+ - */^ r()“我试图基于这个正则表达式来标记化 – Nanos

+0

然后你不需要使用分离的捕获组 –

回答

1

你可以简单地做到这一点:

$pattern = '~\d+(?:\.\d+)?|[-+*/^r()]~'; 
+0

不要' - ^()'都需要逃脱? – Nanos

+0

以及'〜'做什么? – Nanos

+0

@Nanos:你不需要在角色类中转义这些角色。 '〜'是模式分隔符(如'/'或'#') –