以下正则表达式做了什么?
[\w+\-.]+
上述正则表达式的输出,\ w + - 。+和\ w + \ - 。+是一样的,但我不明白为什么?
测试字符串
sadkfj-dslk.sdjklf!sdljf
你能解释一下吗?
答案 0 :(得分:3)
这是相同的,因为反斜杠是多余的;当它不表示有效字符范围(即-
不是字符范围)时,您实际上不需要转义+-.
,因为它将被视为文字破折号无论如何,无论如何。
给定的正则表达式会查找以下任意一个或多个字符:\w
(单词字符),+
(加号),-
(短划线)或{{1 (句)。由于不需要.
之前的反斜杠,无论是否包含它都没有区别。
答案 1 :(得分:2)
在方括号内,连字符具有特殊含义(“范围”),因此字面连字符应转义为\-
。但是,根据您的特定正则表达式引擎,您可能会使用未转义的语法,因为在这种特殊情况下,没有歧义。
(例如,Perl将接受这两个版本并产生预期结果,但是use warnings;
它会抱怨缺少反斜杠。)
答案 2 :(得分:1)
这匹配一个'单词字符'[0-9a-zA-Z_](\ w匹配单词字符),或者一个+字符,或一个连字符(\转义 - ),或者一个完整的句点,其中所有的这不止一次重复。
这意味着它将匹配包含正常字母,下划线,加号,连字符或句号的任何字符串,前提是没有空格。简而言之 - 在我看来,这是一个从URL中识别字符串以查找数据库条目的函数。
没有区别因为逃避 - 没有必要,因为没有字符匹配“+ to。”,所以逃脱或未转义,它没有区别。