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

这个还真不懂~学习一下
页: 1 2 [3] 4
查看完整版本: [已解决]谈谈au3正则中的括号