我有一个字符串,如“你今晚可以赢得$ 200,000。立即注册!”
奖金从字符串变为字符串,所以我必须以某种方式使用php regex或类似的东西。
如何使用php从这个字符串中获取此值?
是否有简单的正则表达式功能?
提前致谢。
答案 0 :(得分:1)
您正在寻找preg_match
,我想:
preg_match("/\$[\d\,]+/", "You can win tonight $200,000. Sign up now!", $matches);
# $matches[0] will be "$200.000"
打破它:
正则表达式查找一个美元符号(在正则表达式中有特殊含义,所以我们用反斜杠转义它,所以它被视为文字美元符号),后跟一个或多个数字(0-9)和逗号。
请注意,如果preg_match
本身返回false,那是因为字符串与正则表达式不匹配,在这种情况下,将无法读取$match[0]
答案 1 :(得分:0)
我可以通过两种方式来做到这一点,你可以使用正则表达式(更慢)或爆炸(更快,但不太准确)。优点是,如果有人从字符串中删除空格,RegEx仍然可以工作,而爆炸可能会突然中断。
$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上的用法的更多信息
有一点需要注意,上述代码在出现错误时并非最佳或全部捕获。在将其用于某种类型的关键工作之前,请确保使用已知的有效和无效字符串执行测试:)