[已解决]正则:匹配字符串中最后一个单词的问题?
本帖最后由 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+的大,从子集上说他是包含后者的,虽然没有后者更明确匹配,但至少就这个例子看上去应该可以匹配最后一个单词,但为什么不是这样的呢? {:face (382):} 这样才可以:.*\b(.+)$ 回复 1# newuser
父集包含子集,那么子集能匹配最后一个单词,为什么父集不能?我想问的是这个问题. .*可以匹配任意字符,包括不可见的控制符,当然也包括""
\w+匹配一个以上的字符或数字
在你的代码中,它优先匹配了字符结尾这个位置
不知道你能否理解 回复 5# pcbar
大师好久不见!曾经多次受到你的帮助,再次表示感谢!{:face (411):} 回复 5# pcbar
但是.*前有\b 最后有$,我想他们已经限定了匹配的位置,而且中间用()来将.*括起来,所以从表面看就应该可以匹配最后一个单词,所以对于.*优先匹配""确实还没理解上去? 正则这东西 一定要多用啊 哎.. 都忘了怎么用了哈 正如3楼所说!将*换成+就可以了。
道理很容易理解吧!
“*”表示 0-N
“+”表示 1-N。
也就是说“*”可以匹配到空白。 回复pcbar
但是.*前有\b 最后有$,我想他们已经限定了匹配的位置,而且中间用()来将.*括起来,所以从表面 ...
newuser 发表于 2010-12-30 10:14 http://www.autoitx.com/images/common/back.gif
这么说吧,我把你看不到的东西给你写出来
"...前略\s\bmatch\b\s\breturned\b$"
你的代码匹配了下划线部分,那里没有可见字符 本帖最后由 newuser 于 2010-12-30 10:46 编辑
回复 10# pcbar
老大,别嫌我专牛角尖.
对于.*\b(.*)$我是不是可以这样理解:
.*匹配了整个字符串的内容
\b从字符串的后面往前匹配,那么就应该是returned的左边界
(.*)匹配了returned\b
$匹配了单词的末端位置
因为(.*)匹配了不可见的\b,所以应用1楼的代码没有显示出匹配结果,但他匹配的内容包括returned这个单词,而(\w+)他至少匹配的是一个以上的字母或数字,没有匹配returned后面的\b,所以他匹配的显示结果就是这个单词.
在请教一个问题:
正则表达式的pattern吧,是不是从左往右进行匹配,有什么优先匹配的规则吗?我刚学正则,目前也看了一些正则资料,当然目前只是看了一遍,脑子里还是糨糊一个. 回复 10# pcbar
老大,能再帮忙解释吗?希望元旦前对他的理解能上去,也祝福元旦快乐! .不可以匹配\b 回复 13# pcbar
老大10楼的帖子下划线部分不是: \b$部分吗?
另外我对:
.通常可以匹配除了\n之外的任意单个字符
理解也应该是出现了错误.
所以 . 除了不能匹配 \n\b,也应该不能匹配 \s\t \f \v,对吗? 回复pcbar
老大10楼的帖子下划线部分不是: \b$部分吗?
另外我对:
.通常可以匹配除了\n之外的任意单 ...
newuser 发表于 2010-12-31 10:31 http://www.autoitx.com/images/common/back.gif
\b、 $、^ 等只是匹配位置(空隙),不包含任何字符,该了了吧~
页:
[1]
2