如何使用PHP从另一个字符串中获取某些字符串?

时间:2011-08-04 12:41:43

标签: php regex string

我有一个字符串,如“你今晚可以赢得$ 200,000。立即注册!”

奖金从字符串变为字符串,所以我必须以某种方式使用php regex或类似的东西。

如何使用php从这个字符串中获取此值?

是否有简单的正则表达式功能?

提前致谢。

2 个答案:

答案 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上的用法的更多信息

有一点需要注意,上述代码在出现错误时并非最佳或全部捕获。在将其用于某种类型的关键工作之前,请确保使用已知的有效和无效字符串执行测试:)