Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 用于货币iso代码和符号的正则表达式_Ruby_Regex - Fatal编程技术网

Ruby 用于货币iso代码和符号的正则表达式

Ruby 用于货币iso代码和符号的正则表达式,ruby,regex,Ruby,Regex,我试图找到与货币iso代码或符号完全匹配的货币。我有一个货币和符号列表,在正则表达式中我只使用(美元|日元)和$等。因此,准则是: 应与货币代码USDJPY或符号$完全匹配。货币代码不区分大小写 Before和after可以有一个可选的数字 货币前后只能有一个数字(中间可以包含空格) 例如: a=4USD-$3+a4 USD/400日元*3USDa 输出将是(以ruby调用.scan):[“USD”、“USD”、“JPY”] 包括3USDa 我尝试了很多模式,但都没有效果,这里有一些模式: /\

我试图找到与货币iso代码或符号完全匹配的货币。我有一个货币和符号列表,在正则表达式中我只使用
(美元|日元)
$等。因此,准则是:

  • 应与货币代码
    USD
    JPY
    或符号
    $
    完全匹配。货币代码不区分大小写
  • Before和after可以有一个可选的数字
  • 货币前后只能有一个数字(中间可以包含空格) 例如:
    a=4USD-$3+a4 USD/400日元*3USDa

    输出将是(以ruby调用
    .scan
    ):
    [“USD”、“USD”、“JPY”]

    包括
    3USDa

    我尝试了很多模式,但都没有效果,这里有一些模式:

    /\d+(?=(美元|日元)(?!\w))(美元|日元)(?=\d+(?!\w))/i


    /(?如果您可以使用捕获组而不是整体匹配,那么以下可能是满足您需求的最简单的正则表达式解决方案:

    /(?<!\w)\d*\s*(JPY|USD|\$|£)\s*\d*(?!\w)/i
    
    /(?
    

    如果您有一个所有货币的列表,则可以通过编程方式构造该正则表达式,如:

    currencies = %w(USD JPN $ £)
    currencies_pattern = currencies.map {|c| Regexp.escape(c) }.join("|")
    full_pattern = /(?<!\w)\d*\s*(#{currencies_pattern})\s*\d*(?!\w)/i
    
    货币=%w(美元JPN$)
    Currences|pattern=currences.map{| c | Regexp.escape(c)}.join(“|”)
    全模式=/(?)?
    
    如上所述,并不是说此返回的
    $
    与您的示例有效匹配。根据我对您的规则的理解,我不明白为什么应将
    $
    视为不匹配。

    那么您希望从字符串中得到什么输出?
    $
    不也应该与您的示例正确匹配吗?并且,为什么
    bob 4 USD
    无效?您说“不能在后面直接包含任何其他内容”(可能也在前面),但
    bob
    不是“前面直接”;它由一个空格分隔。另外,您如何知道
    $
    USD
    而不是
    CAD
    ?两者使用相同的符号您不需要关闭它,因为其他人可能会发现它很有趣。您可能希望在评论中提及您使用的特定宝石组合。