拆分包含小数而不是整数的字符串

时间:2014-10-12 19:04:12

标签: php regex

我分了一个字符串' 3(1-5)'像这样:

$pattern = '/^(\d+)\((\d+)\-(\d+)\)$/';
preg_match($pattern, $string, $matches);

但我需要为小数做同样的事情,即' 3.5(1.5-4.5)'。 如果用户写了' 3,5(1,5-4,5)'

,我该怎么做?

输出' 3.5(1.5-4.5)'应该是:

$matches[1] = 3.5
$matches[2] = 1.5
$matches[3] = 4.5

2 个答案:

答案 0 :(得分:7)

您可以使用以下正则表达式。

$pattern = '/^(\d+(?:[.,]\d+)?)\(((?1))-((?1))\)$/';

第一个捕获组( ... )符合以下模式:

(           # group and capture to \1:
  \d+       #   digits (0-9) (1 or more times)
  (?:       #   group, but do not capture (optional):
    [.,]    #     any character of: '.', ','
    \d+     #     digits (0-9) (1 or more times)
  )?        #   end of grouping
)           # end of \1

之后我们寻找一个左括号,然后递归(匹配/捕获)第一个子模式后跟一个连字符(-),然后递归( match / capture < / em>)第一个子模式再次后面有一个右括号。

Code Demo

答案 1 :(得分:-1)

这种模式应该有所帮助:

^(\d+\.?\,?\d+)\((\d+\,?\.?\d+)\-(\d+\.?\,?\d+)\)$