本帖最后由 余烬之中 于 2014-2-1 16:47 编辑
david_ng223 发表于 2014-2-1 15:12
\s
匹配任意的空白符
点评累死了……
==================================================================编辑↓
你的错误在这句话没有错误
@note =~ /\[pkdh\s*(\d+(?:\.\d+)?)\]/ ? $1.to_f : 0.0
@note =~ /\[pkdh\s*(\d+(?:\.\d+)?)\]/ ? $1.to_f : 0.0
(第二个问号不需要 但是也不会出错 既然是冗余我就删了)
================ 补充:问号表示匹配一次或零次 如果所有数据强制要求0.0的形式不用问号 如果允许写整数就加上问号 ================
进行匹配
"[pkdh 99.98]" =~ /\[pkdh\s*(\d+(?:\.\d+))\]/ # $1 "99" # $2 nil
"[pkdh 99.98]" =~ /\[pkdh\s*(\d+(?:\.\d+))\]/
# $1 "99"
# $2 nil
(感谢@taroxd 指出的Bug 这段解说↑有误 正确的如下)
"[pkdh 99.98]" =~ /\[pkdh\s*(\d+(?:\.\d+))\]/ # $1 "99.98" # $2 nil
"[pkdh 99.98]" =~ /\[pkdh\s*(\d+(?:\.\d+))\]/
# $1 "99.98"
# $2 nil
==================================================================编辑↑
因为(?:)是 无后位引用功能的分群 不能被$2引用
你可以这样
"[pkdh 99.98]" =~ /\[pkdh\s*(\d+)\.(\d+)\]/ # $1 "99" # $2 "98"
"[pkdh 99.98]" =~ /\[pkdh\s*(\d+)\.(\d+)\]/
# $1 "99"
# $2 "98"
还可以这样
"[pkdh 99.98]" =~ /\[pkdh\s*(\d+\.\d+)\]/ # $1 "99.98" # $2 nil
"[pkdh 99.98]" =~ /\[pkdh\s*(\d+\.\d+)\]/
# $1 "99.98"
# $2 nil
还可以这样
"[pkdh 99.98]" =~ /\[pkdh\s*(.+\..+)\]/ # $1 "99.98" # $2 nil
"[pkdh 99.98]" =~ /\[pkdh\s*(.+\..+)\]/
# $1 "99.98"
# $2 nil
所以 最后就是这样
@note =~ /\[pkdh\s*(.+\..+)\]/ ? $1.to_f : 0.0
@note =~ /\[pkdh\s*(.+\..+)\]/ ? $1.to_f : 0.0
|