是否有表达简洁的方式:正则表达式:如何快速 W,没有下划线
\w but without _
也就是说,“列入\所有字符W,除了_”
我问这是因为我正在寻找最简洁的方式来表示域名验证。域名可能包括小写字母和大写字母,数字,句号和短划线,但不包含下划线。 \ w包含以上所有内容,并加上下划线。那么,是否有任何方法通过正则表达式从\ w中“删除”下划线?
被修改:我在问PHP中使用的正则表达式。
在此先感谢!
是否有表达简洁的方式:正则表达式:如何快速 W,没有下划线
\w but without _
也就是说,“列入\所有字符W,除了_”
我问这是因为我正在寻找最简洁的方式来表示域名验证。域名可能包括小写字母和大写字母,数字,句号和短划线,但不包含下划线。 \ w包含以上所有内容,并加上下划线。那么,是否有任何方法通过正则表达式从\ w中“删除”下划线?
被修改:我在问PHP中使用的正则表达式。
在此先感谢!
为了安全起见,通常情况下,我们将使用字符类:
[a-zA-Z0-9.-]
上述匹配英文字母的正则表达式“片段”,和数字,加上期.
和破折号-
。即使使用最基本的正则表达式支持,它也应该可以工作。
较短可能会更好,但只有当你确切地知道它代表什么。
我不知道你在用什么语言。在很多引擎中,\w
相当于[a-zA-Z0-9_]
(有些需要“ASCII模式”)。但是,某些引擎对正则表达式具有Unicode支持,并且可能会扩展\w
以匹配Unicode字符。
一些正则表达式的味道有可能使用负回顾后的语法:
\w(?<!_)
消极lookaheads比负向lookbehinds更广泛支持。 – 2013-02-13 16:42:25
@JosephSilber确实。从概念上说,我发现“给我一个字的字符......但不是下划线”比稍后“我想要的不应该是一个下划线......否则,给我一个字的字符”稍微容易一些,如果负面的后顾*是*可用,但。 – 2013-02-13 16:49:42
你可以使用一个negative lookahead:(?!_)\w
不过,我觉得写[a-zA-Z0-9.-]
更具有可读性。
如果我的理解是正确的\w
意味着[A-Za-z0-9_]
期的迹象,短线不包括在内。
信息: http://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes
,所以我想你想要的是[a-zA-Z0-9.-]
当您使用非英文字母时,问题随之而来。 – 2013-02-13 16:44:10
@ZoltánTamási**域名**,非英文字母? – Kent 2013-02-13 16:46:12
@Kent - [ICANN批准非拉丁域名](http://news.cnet.com/8301-1023_3-10387139-93.html)。 – 2013-02-13 16:47:44
我会[^ _]开始,然后想还有什么角色,我需要拒绝。如果您需要过滤键盘输入,则枚举所有不需要的字符非常简单。
你可以写这样的事情:如果你使用preg_filter以该字符串
\([^\w]|_)\u
\ w中的任何字符(不包括_下划线)都将被过滤。
取决于正则表达式的风味。你使用哪种语言?最简单的方法是使用'[A-Za-z0-9]'。 '\ w'确实(通常)**不包括破折号或句点。 – 2013-02-13 16:37:17
根据风格'\ w'可以支持Unicode字符。除非你完全确定'\ w'表示什么,否则最好使用字符类'[]'并将其全部列出。 – nhahtdh 2013-02-13 16:38:15