将单词与反斜杠匹配

时间:2014-01-14 11:11:01

标签: ruby regex

我正在努力编写一个Ruby正则表达式,它将匹配所有单词:以2或3个字母开头,然后有反斜杠(\),然后有7或8个字母和数字。我使用的表达式是这样的:

p "BFD\082BBSA".match %r{\A[a-zA-Z]{2,3}\/[a-zA-Z0-9]{7,8}\z}

但每次此代码返回nil时。我做错了什么?

3 个答案:

答案 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)

您希望匹配反斜杠,但是您正在匹配正斜杠。请将RegEx更改为

[a-zA-Z]{2,3}\\[a-zA-Z0-9]{7,8}

请注意\\而不是\/。在工作中检查RegEx,here