_?
在以下rails regex中的含义是什么?
/\A_?[a-z]_?(?:[a-z0-9.-]_?)*\z/i
我试图破译正则表达式如下
# regex explained
# \A : matches the beginning of the string
# _? :
# [ : beginning of character group
# a-z : any lowercase letter
# ] : end of character group
# _? :
# ( : is a capture group, anything matched within the parens is saved for later use
# ?: : non-capturing group: matches below, but doesn't store a back-ref
# [ : beginning of character group
# a-z : any lowercase letter
# A-Z : any uppercase letter
# 0-9 : any digit
# . : a fullstop or "any character" ??????
# _ : an underscore
# ] : end of character group
# _? :
# ) : See above
# * : zero or more times of the given characters
# \z : is the end of the string
答案 0 :(得分:2)
_
匹配下划线。
?
匹配前一个字符中的零个或一个;基本上使前面的字符可选。
因此_?
会匹配一个下划线(如果它存在),并且在没有它的情况下匹配。
答案 1 :(得分:1)
?
表示前一个表达式应该显示0或1次,类似于*
表示它应匹配0次或更多次,或+
表示它应匹配1个或更多次。
因此,例如,使用RE /\A_?[A-Z]?\z/
,以下字符串将匹配:
_O
_
P
但这些不会:
____
A_
PP
您最初发布的RE声明:
与此RE匹配的示例字符串:
_a_abcdefg
b_abc_def_
_qasdf_poiu_
a12345_
z._.._...._......_
u
答案 2 :(得分:1)
_?
表示_
是可选的。
它可以接受_sadasd_sadsadsa_asdasdasd_
或asdasdsadasdasd
,即_
分隔的字符串_
是可选的。
参见演示。