我有一个像"你今晚可以赢得20万美元。现在就报名吧!"
奖品从一个字符串到另一个字符串,所以我必须使用php regex或类似的东西。
如何使用php从这个字符串得到这个值?
是否有一个简单的正则表达式函数?
你在找preg_match
,我想:
preg_match("/$[d,]+/", "You can win tonight $200,000. Sign up now!", $matches);
# $matches[0] will be "$200.000"
分解:
正则表达式查找一个美元符号(它在正则表达式中有特殊的含义,所以我们用反斜杠转义它,所以它被当作文字美元符号),后面跟着1个或多个数字(0-9)和逗号。
请注意,如果preg_match
本身返回false,这是因为字符串不匹配regexp,在这种情况下,将没有$match[0]
来读取
我可以看到有两种方法可以做到这一点,您可以使用正则表达式(较慢)或爆炸(更快,但不太准确)。优点是,如果有人从字符串中删除空格,RegEx仍然可以工作,而explosion可能会突然中断。
$src = "You can win tonight $200,000. Sign up now!";
function get_amount($from){
$src_tkns = explode(' ', $from);
foreach($src_tkns as $tkn){
if(substr($tkn, 0, 1)==='$'){
return (substr($tkn, -1, 1)=='.')?substr($tkn, 0, -1):$tkn;
}
}
return false;
}
function get_amount_regex($from){
$r = '/$[-+]?[0-9]*(,?[0-9]+)+/';
preg_match_all($r, $from, $res);
return is_array($res)?$res[0][0]:false;
}
print('Found: '.get_amount($src).'<br />');
print('Regex Found: '.get_amount_regex($src));
关于正则表达式及其用法的更多信息,请访问PHP PCRE页面http://www.php.net/manual/en/book.pcre.php和正则表达式信息站点http://www.regular-expressions.info/tutorial.html
需要注意的一点是,当涉及到错误时,上面的代码不是最优的,也不是完全捕获的。在将其用于某些类型的关键工作之前,请确保使用已知的有效和无效字符串执行测试:)