试图抓住(h),(w)和(d)前面的数字。这些是动态的,我无法得到它的语法:
<ul>
<li>Make: Mymake</li>
<li>Model: R-22GTF</li>
<li>Dimensions: 13.25" (h) x 20.13" (w) x 18.5" (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)之前的数字定义。
答案 0 :(得分:3)
<?php
$input = "
<ul>
<li>Make: Mymake</li>
<li>Model: R-22GTF</li>
<li>Dimensions: 13.25" (h) x 20.13" (w) x 18.5" (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
如果你想测试各种正则表达式的组合,请尝试一些在线的正则表达式验证器,如:
在您键入时,它会匹配您的表达式。
答案 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\)
它对验证有点严格,但它的贪婪,所以冗余溢出限制是必要的。如果需要,您可以使用.*?
替换否定类。