PHP 正则提取字符串中的美元

问题描述

请使用正则表达式,能够把以下符合美元价格格式的字符串匹配并可从一段字符串中提取出来:"200.49"、"1,999.00"、"$1,998.00"、"$99"、"50.00美元"、"$50.00"、"199美元"。

SOS

需要用正则将 $1,998.00 ,$99、50.00美元、$50.00 、199美元,提取出来
希望好心大牛们可以帮忙解惑

本作品采用《CC 协议》,转载必须注明作者和本文链接
当你的才华撑不起你的野心,那就静下来学习
附言 1  ·  4年前

有思路的小伙伴们帮忙附言

crazyly
讨论数量: 4
\$?\d{1,3}(?:,\d{3})*(?:\.\d{0,2})?(?:\s*美元)?

file

站点:https://regex101.com/

4年前 评论
crazyly

@Wi1dcard

$str    = '"200.49"、"1,999.00"、"$1,998.00"、"$99"、"50.00美元"、"$50.00","199 美元"';
$patten = '/\$?\d{1,3}(?:,\d{3})*(?:\.\d{0,2})?(?:\s*美元)?/';
preg_match_all($patten, $str, $sd);
var_dump($sd);
exit;

输出结果(200.49与1,999.00,不是美元也输出了)
array(1) {
  [0]=>
  array(7) {
    [0]=>
    string(6) "200.49"
    [1]=>
    string(8) "1,999.00"
    [2]=>
    string(9) "$1,998.00"
    [3]=>
    string(3) "$99"
    [4]=>
    string(11) "50.00美元"
    [5]=>
    string(6) "$50.00"
    [6]=>
    string(10) "199 美元"
  }
}
4年前 评论

哦,如果不带美元关键字就不匹配的话,那稍微修改即可:

\$\d{1,3}(?:,\d{3})*(?:\.\d{0,2})?(?:\s*美元)
4年前 评论
(?:\$\d{1,3}(?:,\d{3})*(?:\.\d{0,2})?)|(?:\d{1,3}(?:,\d{3})*(?:\.\d{0,2})? 美元)
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!