找回密码
 加入
搜索
查看: 9750|回复: 17

[AU3基础] [已解决]正则:匹配字符串中最后一个单词的问题?

 火.. [复制链接]
发表于 2010-12-29 10:20:37 | 显示全部楼层 |阅读模式
本帖最后由 newuser 于 2011-1-4 14:27 编辑

#include <array.au3>
Local $str="At this point the remaining pattern matches, so this is the match returned"
Local $result=StringRegExp($str,".*\b(\w+)$",3)
_ArrayDisplay($result)
以上能匹配出最后一个单词.
我的问题是:
将(\w+)换成(.*)为什么不能匹配出最后一个单词?
.*范围比\w+的大,从子集上说他是包含后者的,虽然没有后者更明确匹配,但至少就这个例子看上去应该可以匹配最后一个单词,但为什么不是这样的呢?
发表于 2010-12-29 13:09:02 | 显示全部楼层
发表于 2010-12-29 13:41:48 | 显示全部楼层
这样才可以:.*\b(.+)$
 楼主| 发表于 2010-12-30 09:33:05 | 显示全部楼层
回复 1# newuser
父集包含子集,那么子集能匹配最后一个单词,为什么父集不能?我想问的是这个问题.
发表于 2010-12-30 10:07:24 | 显示全部楼层
.*可以匹配任意字符,包括不可见的控制符,当然也包括""
\w+匹配一个以上的字符或数字
在你的代码中,它优先匹配了字符结尾这个位置
不知道你能否理解
发表于 2010-12-30 10:13:55 | 显示全部楼层
回复 5# pcbar

大师好久不见!曾经多次受到你的帮助,再次表示感谢!
 楼主| 发表于 2010-12-30 10:14:52 | 显示全部楼层
回复 5# pcbar

但是.*前有\b 最后有$,我想他们已经限定了匹配的位置,而且中间用()来将.*括起来,所以从表面看就应该可以匹配最后一个单词,所以对于.*优先匹配""确实还没理解上去?
发表于 2010-12-30 10:19:20 | 显示全部楼层
正则这东西 一定要多用啊      哎..   都忘了怎么用了  哈
发表于 2010-12-30 10:20:34 | 显示全部楼层
正如3楼所说!将*换成+就可以了。

道理很容易理解吧!
“*”表示 0-N
“+”表示 1-N。
也就是说“*”可以匹配到空白。
发表于 2010-12-30 10:20:52 | 显示全部楼层
回复  pcbar

但是.*前有\b 最后有$,我想他们已经限定了匹配的位置,而且中间用()来将.*括起来,所以从表面 ...
newuser 发表于 2010-12-30 10:14


这么说吧,我把你看不到的东西给你写出来
"...前略\s\bmatch\b\s\breturned\b$"
你的代码匹配了下划线部分,那里没有可见字符

评分

参与人数 1金钱 +50 收起 理由
水木子 + 50 受教啦!

查看全部评分

 楼主| 发表于 2010-12-30 10:44:02 | 显示全部楼层
本帖最后由 newuser 于 2010-12-30 10:46 编辑

回复 10# pcbar
老大,别嫌我专牛角尖.
对于.*\b(.*)$我是不是可以这样理解:
.*匹配了整个字符串的内容
\b从字符串的后面往前匹配,那么就应该是returned的左边界
(.*)匹配了  returned\b
$匹配了单词的末端位置
因为(.*)匹配了不可见的\b,所以应用1楼的代码没有显示出匹配结果,但他匹配的内容包括returned这个单词,而(\w+)他至少匹配的是一个以上的字母或数字,没有匹配returned后面的\b,所以他匹配的显示结果就是这个单词.
在请教一个问题:
正则表达式的pattern吧,是不是从左往右进行匹配,有什么优先匹配的规则吗?我刚学正则,目前也看了一些正则资料,当然目前只是看了一遍,脑子里还是糨糊一个.
 楼主| 发表于 2010-12-30 16:32:08 | 显示全部楼层
回复 10# pcbar
老大,能再帮忙解释吗?希望元旦前对他的理解能上去,也祝福元旦快乐!
发表于 2010-12-31 09:11:05 | 显示全部楼层
.不可以匹配\b
 楼主| 发表于 2010-12-31 10:31:59 | 显示全部楼层
回复 13# pcbar
老大10楼的帖子下划线部分不是: \b$  部分吗?
另外我对:
.通常可以匹配除了\n之外的任意单个字符
理解也应该是出现了错误.
所以 . 除了不能匹配 \n  \b,也应该不能匹配 \s  \t \f \v,对吗?
发表于 2010-12-31 12:13:37 | 显示全部楼层
回复  pcbar
老大10楼的帖子下划线部分不是: \b$  部分吗?
另外我对:
.通常可以匹配除了\n之外的任意单 ...
newuser 发表于 2010-12-31 10:31



    \b、 $、^ 等只是匹配位置(空隙),不包含任何字符,该了了吧~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-27 01:10 , Processed in 0.087535 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表