原帖由 ly5066113 于 2009-4-20 15:55 发表
应该是什么也匹配不了吧。
以abc为例:
a(?=b) 匹配的是a 和 b之间0宽度的这个位置,它的后面不可能是c
因此 a(?=b)c 什么也匹配不了
原帖由 ly5066113 于 2009-4-20 15:55 发表
应该是什么也匹配不了吧。
以abc为例:
a(?=b) 匹配的是a 和 b之间0宽度的这个位置,它的后面不可能是c
因此 a(?=b)c 什么也匹配不了
原帖由 wangcn 于 2009-4-20 16:14 发表
我是在另一个地方看到有人要匹配abc,但是顺序不定,最后那人给的答案是(?=.*a.*)(?=.*b.*)(?=.*c.*)\w+,能解释下吗?
原帖由 ly5066113 于 2009-4-20 15:55 发表
应该是什么也匹配不了吧。
以abc为例:
a(?=b) 匹配的是a 和 b之间0宽度的这个位置,它的后面不可能是c
因此 a(?=b)c 什么也匹配不了
原帖由 wangcn 于 2009-4-20 16:14 发表
我是在另一个地方看到有人要匹配abc,但是顺序不定,最后那人给的答案是(?=.*a.*)(?=.*b.*)(?=.*c.*)\w+,能解释下吗?
原帖由 woodie 于 2009-4-21 09:26 发表
这个正则会匹配一段含有a,b,c三个字符至少出现一次的串,其中夹杂其它字母数字也可以。不过可以简化一下:
(?=.*a)(?=.*b)(?=.*c)\w+
改成上面这样效果是一样的。
(?=re)匹配一个位置,它的后面匹配re。所以(?=.*a)(?=.*b)(?=.*c)就表示一个位置,后面必须出现一个带有a的串,一个带有b的串还有一个带有c的串。因此整个表达式就是匹配一个串,由字母数字下划线构成,并且abc至少出现一次。
如果要匹配不重复的abc连在一起,中间没有其它字符,换句话说匹配abc的各种排列,可以写成这样:
(?!.?(.)\1|(.).\2)[abc]{3}
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |