首页 新闻 会员 周边

帮我看看这个正则表达式

0
悬赏园豆:10 [已解决问题] 解决于 2009-05-27 14:57

[^&;]+(?:&\w+;[^&;]*)这个正则表达式具体什么意思啊,请大家帮帮忙,谢谢

问题补充: 感谢大家的问答,不过我还是想知道括号中的?:什么意思,有人知道吗?
奋斗的小涛的主页 奋斗的小涛 | 初学一级 | 园豆:135
提问于:2009-05-21 22:45
< >
分享
最佳答案
0

[^&;]+(?:&\w+;[^&;]*)分析如下:

[^&;]+ 表示必须是以非&和非;的字符作为开始,数目1~n

(?:&\w+;[^&;]*) 中的(?:)表示这是一个非捕捉组,即Match.Groups中不会有该组的信息

&\w+;[^&;]* 表示由&开头加\w(必须有)再加;的形式,因为后面有[^&;]*,所以这个组的结尾要么不是;要么只有一个;

当然这个组中也只会有一个;

最后这里分析的字符串并不仅限于整个字符串,也可以是字符串的一个子串,因为没有限定^开始符和$终止符

如:d  dd3&as;sss;;;dd;;ff3ddd&afdsf;&a;3;3;

(d  dd3&as;sss)
(ff3ddd&afdsf;)

蚂蚁蚂蚁 | 菜鸟二级 |园豆:240 | 2009-05-25 19:39
其他回答(2)
0

以多个非&或; 开头(至少一个),后续 :&字符串(字符\w);,以多个非&或; 结尾(可为0个)。

“……(?:&……”里的“?”实在让人费解啊,我只能做忽略理解了。我对正则一知半解,只能读到这程度。

陛下 | 园豆:3938 (老鸟四级) | 2009-05-22 10:04
0

为了便于理解,我把表达式[^&;]+(?:&\w+;[^&;]*)分行显示

----------------------------
第一行:[^&;]+
第二行:(?:
第三行:&\w+;[^&;]*
第二行:)

-----------------------------------------------------
第一行:匹配一个以上的不是[&]也不是[;]的字符;
第二行:匹配括号内的整个表达式(即第三行),但不捕获匹配的文本,所以在此不影响结果,
            即表达式可以写成[^&;]+&\w+;[^&;]*,结果也是一样的。可能这么做是为了兼顾速度和以后的扩展;
第三行:首先匹配一个[&],再匹配一个以上的字符,接着匹配一个[;];最后匹配任意个不是[&]也不是[;]的字符。

例子:
表达式:
[^&;]+&\w+;[^&;]*或[^&;]+(?:&\w+;[^&;]*)
文本:
word1&word2;word3&word4;word5&word6&word7;
结果:红色为第一行匹配,绿色为第三行匹配
word1&word2;word3
word6&word7;

HA-LOU | 园豆:192 (初学一级) | 2009-05-22 11:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册