gpt4 book ai didi

ruby 味正则表达式 : A[[:digit:]]* accepts character at the beginning of string

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:25 25 4
gpt4 key购买 nike

我有以下 Ruby 风格的正则表达式:

data.to_s.match(/\A[[:digit:]]*+((.|,)[[:digit:]]+)?\Z/) ? true : false

这会按预期为以下示例返回 true:

data = "13"
data = "1,3"
data = "13,3"
data = "1.3"
data = ",3"
data = ".3"

我不清楚的是为什么第一个 [[:digit:]] 之后的星号也允许在字符串的开头传递一个字符:

irb > "a3".match(/\A[[:digit:]]*+((.|,)[[:digit:]]+)?\Z/)
=> #<MatchData "a3" 1:"a3" 2:"a">

如何让它只匹配数字?

最佳答案

. 是一个正则表达式元字符,它匹配您需要在交替中转义的任何字符(换行符除外):

data.to_s.match(/\A[[:digit:]]*((\.|,)[[:digit:]]+)?\Z/) ? true : false
# this dot needs escaping ^

第一个 * 之后的 + 也是多余的(零位或多位数字的一次或多次重复)。 ruby 也有一种更简短的友好方式来表示 [[:digit:]]:\d。因为这是一个完整的字符串匹配,你真的要在字符串末尾允许 \n 吗?如果不是,请使用 \z 而不是 \Z

data.to_s.match(/\A\d*((\.|,)\d+)?\z/) ? true : false

关于 ruby 味正则表达式 : A[[:digit:]]* accepts character at the beginning of string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14991433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com