PHP preg_match用于维度

时间:2014-02-04 07:50:28

标签: php regex

我正在搜索几个小时来获取正则表达式以匹配字符串中的维度。 考虑以下类型的字符串,

120x200
100' X 130'
4 acres
0.54
0.488 (90x223)/ GIS0.78
90x160
100x149.7
143.76 X 453.52
6.13 per tax bill
120x378 per tax roll

我希望O / P只包含尺寸,即使是'X'或'x' 从上面的字符串中,预期的输出是

120x200,100' X 130',0,0,90x223,90x160,100x149.7,143.76 X 453.52,0,120x378

有没有可能的注册?或任何其他替代方案?

由于

2 个答案:

答案 0 :(得分:2)

这似乎有效:

<?php

$str = <<<EOD
120x200
100' X 130'
4 acres
0.54
0.488 (90x223)/ GIS0.78
90x160
100x149.7
143.76 X 453.52
6.13 per tax bill
120x378 per tax roll
EOD;

$lines = explode("\n", $str);

foreach($lines as $line) {
    if (preg_match('/-?(\d+(?:\.\d+)?(\'|ft|yd|m|")?)\s*x\s*-?(\d+(?:\.\d+)?(?:\\2)?)/i', $line, $match)) {
        echo "{$match[1]}x{$match[3]}\n";
    } else {
        echo "0\n";
    }
}

如果要匹配更多内容,可以在第3个带括号的表达式中添加更多度量单位,但这样可以匹配整数,实数和可选的度量单位。

答案 1 :(得分:0)

这应该让你开始:

\d+(\.\d+)?['"]?\s*[xX]\s*\d+(\.\d+)?['"]?

演示http://regexr.com?386sf

但是,它并未涵盖所有情况,因为它们太定制,无法由正则表达式处理。 我建议使用自定义方法来解析不同情况下的输入。