gsub在ruby中如何使用输入中的元字符
我需要帮助来理解下面的工作原理gsub在ruby中如何使用输入中的元字符,ruby,Ruby,我需要帮助来理解下面的工作原理 "middl'-.*$%ddlemiddlemiddlemiddlemiddlemiddlemiExcess".gsub(/[^a-zA-Z'-.]/, '') # => "middl'-.*ddlemiddlemiddlemiddlemiddlemiddlemiExcess" "middl'-.*$%ddlemiddlemiddlemiddlemiddlemiddlemiExcess".gsub(/[^a-zA-Z.'-]/, '') # => "
"middl'-.*$%ddlemiddlemiddlemiddlemiddlemiddlemiExcess".gsub(/[^a-zA-Z'-.]/, '')
# => "middl'-.*ddlemiddlemiddlemiddlemiddlemiddlemiExcess"
"middl'-.*$%ddlemiddlemiddlemiddlemiddlemiddlemiExcess".gsub(/[^a-zA-Z.'-]/, '')
# => "middl'-.ddlemiddlemiddlemiddlemiddlemiddlemiExcess"
当我给出/[^a-zA-Z'-.]/
时,星号不会被移除,但在第二个示例中,星号被移除。为什么?
我希望
gsub
之后的结果只存在字母(a-zA-Z
)、句点(
)、hypen(-
)、单撇号(')
)。仅通过更改正则表达式中的句点位置,输出就不同了。在/[^a-zA-Z'-.]/
中,连字符被视为范围分隔符,与前面的a-Z
完全相同。范围是:
▶ ("'"..'.').to_a
#⇒ ["'", "(", ")", "*", "+", ",", "-", "."] # note asterisk
在/[^a-zA-Z.-]/
中,连字符是最后一个符号,因此它本身被视为连字符。这可能会帮助您: