静默Ruby正则表达式警告

静默Ruby正则表达式警告,ruby,regex,Ruby,Regex,我的正则表达式中有一个-。当我运行它时,我得到了警告:字符类有'-'而没有转义:/[^a-zA-Z0-9-\\.]/ 如何使此警告静音?在此处[^a-zA-Z0-9-\\.]可能发生错误。“-”的用法表示新范围(输入错误)或只是一个符号。可以将单个字符移动到范围前面,也可以使用前缀“\”添加反斜杠(\)以避开单独的破折号。似乎有问题的破折号紧跟在[^a-zA-Z0-9之后。添加\-,而不仅仅是破折号字符-。包含微小更改的完整正则表达式为 /[^a-zA-Z0-9\-\\.]/ 这将删除警告。用反

我的正则表达式中有一个
-
。当我运行它时,我得到了
警告:字符类有'-'而没有转义:/[^a-zA-Z0-9-\\.]/


如何使此警告静音?

在此处
[^a-zA-Z0-9-\\.]
可能发生错误。“-”的用法表示新范围(输入错误)或只是一个符号。可以将单个字符移动到范围前面,也可以使用前缀“\”

添加反斜杠(
\
)以避开单独的破折号。似乎有问题的破折号紧跟在
[^a-zA-Z0-9
之后。添加
\-
,而不仅仅是破折号字符
-
。包含微小更改的完整正则表达式为

/[^a-zA-Z0-9\-\\.]/


这将删除警告。用反斜杠转义它会清楚地指示正则表达式引擎您是要搜索该字符,而不是忘记填写类似
[a-z]

的范围。为什么不将
-
移到前面(或后面)或者首先使用
\-
来避免警告?当你发布问题时,尽量给出一个再现该问题的最小示例。我简化了正则表达式。试试这个:
[^\w.-]
。不确定点之前的反斜杠是转义点还是在类中包含反斜杠,但如果您希望在集合中也包含反斜杠,请使用
[^\w.\\-]
令人惊讶的一种语言,ruby在本例中认识到这个特殊的破折号
-
不是一个范围运算符。在异常情况下,当它明显不含糊并且应该被视为一个文本时,它会不厌其烦地告诉你这一点。他们一定认为正则表达式程序员是孩子。@sln这几乎就像很容易理解一样相同的类型
az-0-9
而不是
a-z0-9
,对潜在问题的快速警告是有用的。也许这只适用于我们这些“孩子”——像你这样的“成年人”无疑在各方面都是完美的,从不犯小错误。不完全正确。警告意味着没有语法问题(因此没有歧义),但用户的意图可能与实际不同。嗯,不是我如何解释这个问题,而是直接解决它。很好!
verbosity = $VERBOSE
$VERBOSE = nil
/[^a-zA-Z0-9-_\\.]/ #=> /[^a-zA-Z0-9-_\\.]/
$VERBOSE = verbosity