m//在列表上下文中的返回值问题

小弟对churchmice 的敬仰犹如滔滔江水啊!

不错,搂主这个问题提的真不错,学到很多东西。

请问churchmice 兄,这些内容是在哪儿看到的呢?


QUOTE:
原帖由 andy820303 于 2008-4-16 15:37 发表
小弟对churchmice 的敬仰犹如滔滔江水啊!

不错,搂主这个问题提的真不错,学到很多东西。

请问churchmice 兄,这些内容是在哪儿看到的呢?

learning perl
mastering regular expression


QUOTE:
原帖由 churchmice 于 2008-4-16 15:26 发表

post to Larry Wall
其实只要理解了正则引擎的backtrace(回朔),这样也是可以理解的
对于$_="OneoNeonE"
使用模式(one)*/i
1.正则引擎从字符串的头部开始
2.由于(one)*也匹配空,所以引擎创建 state1,这个 ...

这个让我也理解了一些
多谢了!
教堂鼠兄已经指出是哪本书了,大家自己去看吧。每个人的理解都不同,但效果是一样的。
多读书没坏处。


QUOTE:
原帖由 churchmice 于 2008-4-16 15:07 发表
至于具体的匹配过程我是这样理解的,
1.一开始看到(one)*,所以整个$_都被匹配了,这个时候返回给@data的值是"onE",因为用了捕捉的(),所以m//g的返回内容是()中捕获的内容
2.由于整个m//g,所以引擎尝试再次匹配, ...

谢谢你的指点


QUOTE:
原帖由 churchmice 于 2008-4-16 15:26 发表

post to Larry Wall
其实只要理解了正则引擎的backtrace(回朔),这样也是可以理解的
对于$_="OneoNeonE"
使用模式(one)*/i
1.正则引擎从字符串的头部开始
2.由于(one)*也匹配空,所以引擎创建 state1,这个 ...

为什么第二句:
2.由于(one)*也匹配空,所以引擎创建 state1,这个state包含了匹配的内容,这里就是null


不是放到匹配过程的最后一步(作为第5点)而作为第2点?这个null不是由最后的空字符所引起的吗?



QUOTE:
原帖由 sosogh 于 2008-4-20 02:14 发表


为什么第二句:
2.由于(one)*也匹配空,所以引擎创建 state1,这个state包含了匹配的内容,这里就是null


不是放到匹配过程的最后一步(作为第5点)而作为第2点?这个null不是由最后的空字符所引起的吗?

这里的1,2,3,4,5,6步的结果从大的方面来说只是进行了一次匹配(1,2,3,4,5,6只是具体的back trace的过程),匹配了"OneoNeonE",同时返回了onE
然后正则引擎看到/m修饰,再从前一次成功匹配的结尾,也就是$_的末尾尝试第二次的匹配,这个过程和前面的1,2,3,4,5,6类似,但是匹配到的结果是null,同时返回的也是null
然后引擎尝试再次匹配,但是上一次成功匹配的位置还是$_的结尾,这样下去会死循环,因而正则引擎便要跳出这个循环,所以不再进行匹配
看样子还是要好好学学正则表达式了!
经典
赶紧收藏