/^\s*((?:[^:\s]*?:)?)/

/^\s*((?:[^:\s]*?:)?)/

/^\s*((?:[^:\s]*?:)?)/  

有点不解, 第一个 和第二个? 是啥意思,前面好像没有前导字符啊,

例如说第一个? 前面是(    它修饰的难道是(     好像不对吧
第二个?  前面是*      *修饰的是[^:\s]     为什么还来个修饰符?  


另外就是有括号的嵌套, 到底那一个算匹配的内容(返回作为列表元素)

[[i] 本帖最后由 drosophilia 于 2008-5-14 11:03 编辑 [/i]]


[Copy to clipboard] [ - ]
CODE:
(?:pattern)

其中的pattern是不捕获的,也就是说你不能用$1来访问,这样有来两个好处
1.运行更快
2.程序每次升级不用改变原先的$x编号


[Copy to clipboard] [ - ]
CODE:
x*?

表示非贪婪匹配,对前面的x进行尽可能少的匹配,一开始匹配0次,如果整个匹配不成功,则匹配1次,依次类推


QUOTE:
原帖由 churchmice 于 2008-5-14 11:32 发表

(?:pattern)

其中的pattern是不捕获的,也就是说你不能用$1来访问,这样有来两个好处
1.运行更快
2.程序每次升级不用改变原先的$x编号

*?  查拉资料知道意思了,跟你说的一样。贪婪和非贪婪匹配的区别
(?:pattern),这点不太理解,你是说?: 组合起来表示一个意思把?     跟.*    *?  一样
而且一般情况下为(?:pattern) 这种子结构??  是这样? 能否给一个例子,谢谢了
(? 和 () 一样,仅仅不捕获结果。


QUOTE:
原帖由 drosophilia 于 2008-5-15 15:58 发表




*?  查拉资料知道意思了,跟你说的一样。贪婪和非贪婪匹配的区别
(?:pattern),这点不太理解,你是说?: 组合起来表示一个意思把?     跟.*    *?  一样
而且一般情况下为(?:pattern) 这种子结构?? ...



[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
$_ = "aaa666bbb";
# to match the number
print "Matched $2 \n" if ( /^(\D+)(\d+)/ ) ;
print "Matched $1 \n" if ( /(?:\D+)(\d+)/);

第一种方式的话没有用(?:pattern),所以$1是aaa,$2是666
第二种方式的话用了(?:pattern),所以$1是666,没有$2

一句话,如果你不想捕获某个结果,就用(?:pattern),这样可以提高运行效率
非常感谢,理解了,一块好铁,哈哈
有点奇怪,为什么看了几个版本的正则表达式,为什么对这些细微的地方没有介绍
我刚学perl   这不是难为我吗?呵呵
http://www.pgsqldb.org/mwiki/index.php/AnOverviewofPerl --这里有非贪婪
http://www.cbi.pku.edu.cn/chinese/documents/perl/perl6.htm--不储存括号内的匹配
我也在学习perl,共勉.