简单的HTML解析器

时间:2013-06-18 12:31:38

标签: php html dom html-parsing extract

<strong class="tb-rmb-num"><em class="tb-rmb">¥</em>39.00</strong>

我正在尝试仅在没有货币符号的情况下检索号码

我目前的代码是

$ret = $html->find('strong[class=tb-rmb-num]');
echo $ret[0];

这将使用标志¥39.00建议检索它,谢谢。

1 个答案:

答案 0 :(得分:3)

在php中:

$string = '¥39.00';

if(preg_match('/([\d\.]+)/', $string, $m)){
    echo $m[1];
} 

哪个输出:

39.00

好的,我会打破这个:

preg_match('/([\d\.]+)/', $string, $m)

preg_match是一个php函数,它允许我们使用正则表达式查找给定字符串中的模式匹配。

这种情况下的正则表达式是:/([\ d。] +)/

  • / .. /是包含表达式
  • 的分隔符
  • (...)是一个组,在组内找到的任何匹配都存储在$ m中。我们只有一个组(因为只有一组括号)所以这个第一组匹配是通过$ m [1]
  • 重新获得的
  • [..]是一个角色类。
  • \ d是所有数字字符的快捷方式,0-9
  • 。意思是文字。字符(它是用\来转义的,因为a。在正则表达式中有特殊含义,但我们希望它代表一个文字。而不是它的特殊意义)
  • 字符类[..]之后的+表示连续多次匹配类中的字符

此示例中$ string的值设置为¥39.00。你需要用你的$ ret [0]替换我的例子中的$ string。

$ m是一个可变占位符,用于存储我们的小组匹配(如上所述)

整个事情都包含在if语句中,所以如果找到模式匹配你可以做一些事情,否则做其他事情,如果不是。

供进一步参考:

  1. http://php.net/manual/en/function.preg-match.php
  2. http://webcheatsheet.com/php/regular_expressions.php