PHP正则表达式用括号括起字符串之前的数字

时间:2012-03-23 15:43:33

标签: php regex preg-match parentheses

试图抓住(h),(w)和(d)前面的数字。这些是动态的,我无法得到它的语法:

    <ul>
      <li>Make: Mymake</li>
      <li>Model: R-22GTF</li>
      <li>Dimensions: 13.25&#34; (h) x 20.13&#34; (w) x 18.5&#34; (d)</li>
      <li>Sold Individually </li>
      <li>Weight: 0 lbs.</li>
    </ul>

if (preg_match("/Dimensions: ((?:\d+)(?:\.\d*)?)/", $desc, $DIMS) == true)
    { echo $DIMS[1];}

以上只返回{​​{1}}。我希望每个都有自己的数组或自己的变量。每个由(h)之前的数字,(w)之前的数字和(d)之前的数字定义。

3 个答案:

答案 0 :(得分:3)

<?php

$input = "    
     <ul>
      <li>Make: Mymake</li>
      <li>Model: R-22GTF</li>
      <li>Dimensions: 13.25&#34; (h) x 20.13&#34; (w) x 18.5&#34; (d)</li>
      <li>Sold Individually </li>
      <li>Weight: 0 lbs.</li>
    </ul>";

$re = '/.* (\d+\.\d+).*\(h\) .* (\d+\.\d+).*\(w\) .* (\d+\.\d+).*\(d\)/';
if(preg_match($re, $input, $matches))
   echo sprintf("H: %s   W: %s   D: %s\n", $matches[1], $matches[2], $matches[3]);
?>

答案 1 :(得分:2)

试试正则表达式,希望我能理解你想要提取的内容:)

[\d.]+(?=&)

编辑:

全球正则表达式

/[\d.]+(?=&)/g

如果你想测试各种正则表达式的组合,请尝试一些在线的正则表达式验证器,如:

  

http://gskinner.com/RegExr/

在您键入时,它会匹配您的表达式。

答案 2 :(得分:1)

您应该可以在此

上执行print_r($ DIMS)

Dimensions:[^\d.;(<]*([\d.]*)[^;(<]*;[^(<]*\(h\)[^\d.;(<]*([\d.]*)[^;(<]*;[^(<]*\(w\) [^\d.;(<]*([\d.]*)[^;(<]*;[^(<]*\(d\)

扩展

Dimensions: 
   [^\d.;(<]* ([\d.]*) [^;(<]* ; [^(<]* \(h\)
   [^\d.;(<]* ([\d.]*) [^;(<]* ; [^(<]* \(w\)
   [^\d.;(<]* ([\d.]*) [^;(<]* ; [^(<]* \(d\)

它对验证有点严格,但它的贪婪,所以冗余溢出限制是必要的。如果需要,您可以使用.*?替换否定类。