我分了一个字符串' 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
答案 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>)第一个子模式再次后面有一个右括号。
答案 1 :(得分:-1)
这种模式应该有所帮助:
^(\d+\.?\,?\d+)\((\d+\,?\.?\d+)\-(\d+\.?\,?\d+)\)$