0

以下正则表达式有什么作用?

[\w+\-.]+

上述正则表达式 \w+-.+ 和 \w+\-.+ 的输出是相同的,但我不明白为什么?

测试字符串

sadkfj-dslk.sdjklf!sdljf

你能给我解释一下吗?

4

3 回答 3

3

也是一样,因为反斜杠是多余的;-当它不表示有效字符范围(即不是字符范围)时,您实际上不需要转义+-.,因为无论如何它都会被视为文字破折号。

给定的正则表达式查找以下字符中的一个或多个:(\w单词字符)、+(加号)、-(破折号)或.(句点)。由于前面的反斜杠-是不必要的,因此是否包含它都没有区别。

于 2012-05-25T14:27:27.290 回答
2

在方括号内,连字符具有特殊含义(“范围”),因此应将文字连字符转义为\-. 但是,根据您的特定正则表达式引擎,您可能会摆脱未转义的语法,因为在这种特殊情况下没有歧义。

(例如,Perl 将接受这两个版本并产生预期的结果,但use warnings;它会抱怨缺少反斜杠。)

于 2012-05-25T14:28:39.943 回答
1

这匹配一个“单词字符”[0-9a-zA-Z_](\w 匹配单词字符),或一个 + 字符,或一个连字符(\ 转义 -),或一个句号,所有这些都重复不止一次。

这意味着它将匹配任何包含普通字母、下划线、加号、连字符或句号的字母字符串,前提是没有空格。简而言之 - 在我看来,这似乎是一个从 URL 中识别字符串以定位数据库条目的函数。

没有区别,因为不需要转义 - ,因为没有字符匹配“+ to .”,所以转义或未转义,没有区别。

于 2012-05-25T14:32:05.840 回答