我正在努力编写一个Ruby正则表达式,它将匹配所有单词:以2或3个字母开头,然后有反斜杠(\
),然后有7或8个字母和数字。我使用的表达式是这样的:
p "BFD\082BBSA".match %r{\A[a-zA-Z]{2,3}\/[a-zA-Z0-9]{7,8}\z}
但每次此代码返回nil
时。我做错了什么?
答案 0 :(得分:4)
尝试如下:
'BFD\082BBSA'.match %r{\A[a-zA-Z]{2,3}\\[a-zA-Z0-9]{7,8}\z}
# => #<MatchData "BFD\\082BBSA">
#or
"BFD\\082BBSA".match %r{\A[a-zA-Z]{2,3}\\[a-zA-Z0-9]{7,8}\z}
# => #<MatchData "BFD\\082BBSA">
另请阅读 - Backslashes in Single quoted strings vs. Double quoted strings in Ruby?
答案 1 :(得分:2)
问题是你的字符串实际上没有反斜杠,只是一个空的Unicode字符:
"BFD\082BBSA"
# => "BFD\u000082BBSA"
所以你只需要转义字符串中的反斜杠:
"BFD\\082BBSA"
# => "BFD\\082BBSA"
此外,正如其他人所指出的那样,\/
会匹配正斜杠,因此您必须将\/
更改为\\
:
"BFD\\082BBSA".match(/\A[a-z]{2,3}\\[a-z0-9]{7,8}\z/i)
# => #<MatchData "BFD\\082BBSA">
答案 2 :(得分:1)