newuser 发表于 2011-6-21 09:38:14

正则:一个奇怪的问题?

本帖最后由 newuser 于 2011-6-21 09:47 编辑

进行 a.b@163.com匹配练习时,用如下正则都好使:
\w+[.-_]*\w*@\w+[.]\w+
\w+[-._]*\w*@\w+[.]\w+
都好使,可是使用
\w+*\w*@\w+[.]\w+
却不行?难道是这个顺序下   -   变成了连接符,可是.-_ 就匹配了,那这里的-不也应该按照连接符理解吗?奇怪!

另外,看资料有个匹配邮箱的正则,看上去很对,但测试怎么通不过呢?
^.+@.+\\..+$
我的理解是:
^.+至少以一个字母开头
@    匹配@
.+   至少匹配一个字母及以上
\\.   匹配 .   
.+   至少匹配一个字母及以上
$   匹配字符串尾部位置
我用这个正则去匹配诸如dfas@163.com   ,没有匹配任何项目?问题在哪里?

easefull 发表于 2011-6-21 10:06:57

在字符集[]里面, '-' 也是元字符.
但字符集里的元字符有些特殊,有时候可以不需要转义符.

"-"        字符集中的元字符(特殊位置可不加转义符:紧跟'['的位置、贴在']'前的位置)

easefull 发表于 2011-6-21 10:09:56

\\.匹配的是 "\" + char

应该用^.+@.+\..+$

binghc 发表于 2011-6-21 10:10:13

奇怪吗?一点儿也不奇怪

newuser 发表于 2011-6-21 10:53:02

回复 2# easefull
我想知道对于我的第一个问题,为什么在字符集里
[.-_] 和效果不一样?虽然-也是元字符,但前者也不是紧跟[或]啊?二者都没有用转义字符\啊,但结果确实不同?

3mile 发表于 2011-6-21 10:56:42

.和_的UNICODE码各是多少?

newuser 发表于 2011-6-21 10:58:52

回复 3# easefull
看来资料上也是错的!谢谢.

easefull 发表于 2011-6-21 11:14:16

回复easefull
我想知道对于我的第一个问题,为什么在字符集里
[.-_] 和效果不一样?虽然-也是元字符 ...
newuser 发表于 2011-6-21 10:53 http://www.autoitx.com/images/common/back.gif

字符集里面的元字符并不是一定要加转义符的.
像"-"在紧跟'['的位置和贴在']'前的位置是可以不加转义符的.

newuser 发表于 2011-6-21 13:56:47

字符集里面的元字符并不是一定要加转义符的.
像"-"在紧跟'['的位置和贴在']'前的位置是可以不加转义符 ...
easefull 发表于 2011-6-21 11:14 http://autoitx.com/images/common/back.gif
我了解啊!字符集中的大多数元字符是不需要加转义符的,因为它们在字符集中已经失去了特定的意义相当于普通字符了,不过少数元字符诸如:\ ^ - : [] 在字符集[]中还保留特殊意义,因此,如果要匹配他们,需要使用\,不过元字符-正如你说的,在紧跟[或]不需要使用转义字符,但我想问的问题是使用和[.-_]
为什么匹配结果不同,请注意是和[.-_],-位于中间,他们的区别是.和_位置不同?

3mile 发表于 2011-6-21 14:27:18

"_"的UNIDOCE=005F
"."的UNIDOCE=002E
"-"的UNIDOCE=002D
[.-_]等同于[\x2e-\x5f]
或等同于[\x{002E}-\x{005F}]这里的-指从0x2E到0x5F的所有字符.即匹配"./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_"里的任意字符
而这个表达式是错误的,能这么写吗?比如你需要匹配A-Z的任意一个字符,可以使用,但如果使用的话,很明显表达式错误,匹配不到任何东西的.

newuser 发表于 2011-6-21 17:25:32

"_"的UNIDOCE=005F
"."的UNIDOCE=002E
"-"的UNIDOCE=002D
[.-_]等同于[\x2e-\x5f]
或等同于[\x{002E}-\ ...
3mile 发表于 2011-6-21 14:27 http://autoitx.com/images/common/back.gif
感觉是顺序的问题,但没想到他还的转成UNICOCE码!
不过总感官上:
005F>002E>002D 啊!
而\w+*\w*@\w+[.]\w+可以匹配类似a.b@163.com,这个和顺序又无关了?所以还是不明白?

3mile 发表于 2011-6-21 18:06:41

回复 11# newuser
是匹配_.-中的任意字符

user3000 发表于 2011-6-22 05:50:30

刚接触正则,看得有点云里雾里的,似乎有点点收获。。
谢谢了

newuser 发表于 2011-6-22 07:57:58

回复newuser
是匹配_.-中的任意字符
3mile 发表于 2011-6-21 18:06 http://autoitx.com/images/common/back.gif
其实我有点专牛角尖了,当时测试时发现不能匹配,把他们调换个顺序就能匹配了,当时想这不是字符分类吗!按照资料解释,同一时间匹配的是字符分类中的一个元素,所以应该和顺序无关啊!可是他们的结果确实不一样,要么匹配成功或要么不成功!所以不知道为什么?
页: [1]
查看完整版本: 正则:一个奇怪的问题?