binghc
发表于 2010-10-18 20:53:26
回复 30# afan
呵呵,版主辛苦啦!
这个问题其实很容易,很多语言会对正则进行功能扩展:
我想你的意思应该是把年前面的数字和这个年字一起屏蔽掉;
其实可以用StringRegExpReplace这个函数:StringRegExpReplace($str, '\d+年','')
然后再用正则分解
binghc
发表于 2010-10-18 20:57:34
下面给出解法二:
本解法更干净利落:
**** Hidden Message *****
afan
发表于 2010-10-18 21:02:31
回复afan
...
可以用StringRegExpReplace这个函数...
binghc 发表于 2010-10-18 20:53 http://www.autoitx.com/images/common/back.gif
替换当然是可以的(我惯用的),我指的是现在这个题目,用匹配模式,估计是没这个搞法了~
下面给出解法二:
本解法更干净利落:
...
binghc 发表于 2010-10-18 20:57 http://www.autoitx.com/images/common/back.gif
学习了~
binghc
发表于 2010-10-18 21:13:27
其实解法二还可以再做一下优化,非捕获括号换成固化分组:
(?:....)改成(?>...)
这样在能匹配的的情况下效率是一样的,但是如果不能匹配,使用固化分组能快速报错,避免不必要的回溯。
binghc
发表于 2010-10-18 21:23:19
本帖最后由 binghc 于 2010-10-19 12:05 编辑
现在回头看看我们的表达式,如果把表达式中的(?:...)直接改成(...)(确实,如果非必须,使用非捕获括号要比捕获括号效率快),然后再对整个表达式上括号会怎样:
1许多2个时候,美是一种距离
2个时候,美是一种距离
2
2站在时8年空之外5月想象你8次会更加美好10000爱情亦如斯
10000爱情亦如斯
10000
3一种憧憬的欣羡的美丽7号一种咀嚼与回味的情韵
7号一种咀嚼与回味的情韵
7号
8号码一种回归与复得的幸福。
我的妈妈呀!这下要找出符合条件的字符串麻烦了!{:face (229):}
好了,我对StringRegExp在模式3下捕获型括号的疑问弄懂了,谢谢afan版主!
liufenglg
发表于 2010-10-18 21:36:49
afan 发表于 2010-10-17 12:42 http://www.autoitx.com/images/common/back.gif
请 问 \1 和\2有何作用
我怎么把他们去掉也可以
afan
发表于 2010-10-18 21:43:04
请 问 \1 和\2有何作用
我怎么把他们去掉也可以
liufenglg 发表于 2010-10-18 21:36 http://www.autoitx.com/images/common/back.gif
引用组的内容,\后面是组号。例子中如果源字符串 hig 后面不是 kitty 的话就可以看出区别了
binghc
发表于 2010-10-18 21:54:42
本帖最后由 binghc 于 2010-10-18 21:58 编辑
回复 37# afan
补充:括号多的时候也可以用命名捕获,后面的引用将是:\k<name> (name:之前的命名)
对了你之前发的图片是不是正在写的正则软件。能不能再添个功能,就是让编辑框能对文字大小进行设置。我现在用的,文字有点小,看起来眼睛特别累,都快看花了
liufenglg
发表于 2010-10-18 21:55:42
引用组的内容,\后面是组号。例子中如果源字符串 hig 后面不是 kitty 的话就可以看出区别了
afan 发表于 2010-10-18 21:43 http://www.autoitx.com/images/common/back.gif
谢谢
afan
发表于 2010-10-18 22:29:26
回复afan
对了你之前发的图片是不是正在写的正则软件。能不能再添个功能,就是让编辑框能对文字大小进行设置。我现在用的,文字有点小,看起来眼睛特别累,都快看花了
binghc 发表于 2010-10-18 21:54 http://www.autoitx.com/images/common/back.gif
早已考虑到这一点,更关键的是因为Edit控件默认的字体不会对 @CR 或 @LF 做出“明示”,所以可以自定义字体、大小、权值、颜色等(同时关联到源Edit框、输入框、结果Edit框等;输出为Listview时暂不考虑自定义),默认使用记事本字体,可以将 @CR 或 @LF 显示为小黑块,避免捕获到了@CR 或 @LF 而“不知情”。。。
binghc
发表于 2010-10-18 22:43:25
本帖最后由 binghc 于 2010-10-18 23:13 编辑
回复 40# afan
那我们就期待你新作品的诞生啦
水木子
发表于 2010-10-19 10:23:54
相当深入的正则讨论!
楼主的正则运用得淋漓尽致,值得学习!
非常期待18楼afan前辈的新作!
Duvet
发表于 2010-10-19 15:20:36
;32樓->本帖隐藏的内容需要回复才可以浏览
;ˊˋ要回覆才可看啊?
;那回答一下20樓的問題好了$str = "1许多2个时候,美是一种距离2站在时8年空之外5月想象你8次会更加美好10000爱情亦如斯3一种憧憬的欣羡的美丽7号一种咀嚼与回味的情韵8号码一种回归与复得的幸福。"
_ArrayDisplay(StringRegExp($str,"\d(?:\D+|\d+号[^码]|\d[年月趟个次]|\d\d+)+",3))
lpxx
发表于 2010-10-21 08:24:50
很多场合用不着这么伤脑子的正则的,不过用于思维训练,你这道题倒是难倒了很多人。
pizigao
发表于 2010-10-21 12:45:06
这个还真不懂~学习一下