如何使用php从另一个字符串抓取某个字符串


How to grab certain string from another string using php?

我有一个像"你今晚可以赢得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

需要注意的一点是,当涉及到错误时,上面的代码不是最优的,也不是完全捕获的。在将其用于某些类型的关键工作之前,请确保使用已知的有效和无效字符串执行测试:)