newuser 发表于 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+的大,从子集上说他是包含后者的,虽然没有后者更明确匹配,但至少就这个例子看上去应该可以匹配最后一个单词,但为什么不是这样的呢?

1253322830 发表于 2010-12-29 13:09:02

{:face (382):}

binghc 发表于 2010-12-29 13:41:48

这样才可以:.*\b(.+)$

newuser 发表于 2010-12-30 09:33:05

回复 1# newuser
父集包含子集,那么子集能匹配最后一个单词,为什么父集不能?我想问的是这个问题.

pcbar 发表于 2010-12-30 10:07:24

.*可以匹配任意字符,包括不可见的控制符,当然也包括""
\w+匹配一个以上的字符或数字
在你的代码中,它优先匹配了字符结尾这个位置
不知道你能否理解

水木子 发表于 2010-12-30 10:13:55

回复 5# pcbar

大师好久不见!曾经多次受到你的帮助,再次表示感谢!{:face (411):}

newuser 发表于 2010-12-30 10:14:52

回复 5# pcbar

但是.*前有\b 最后有$,我想他们已经限定了匹配的位置,而且中间用()来将.*括起来,所以从表面看就应该可以匹配最后一个单词,所以对于.*优先匹配""确实还没理解上去?

qop1830 发表于 2010-12-30 10:19:20

正则这东西 一定要多用啊      哎..   都忘了怎么用了哈

水木子 发表于 2010-12-30 10:20:34

正如3楼所说!将*换成+就可以了。

道理很容易理解吧!
“*”表示 0-N
“+”表示 1-N。
也就是说“*”可以匹配到空白。

pcbar 发表于 2010-12-30 10:20:52

回复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:44:02

本帖最后由 newuser 于 2010-12-30 10:46 编辑

回复 10# pcbar
老大,别嫌我专牛角尖.
对于.*\b(.*)$我是不是可以这样理解:
.*匹配了整个字符串的内容
\b从字符串的后面往前匹配,那么就应该是returned的左边界
(.*)匹配了returned\b
$匹配了单词的末端位置
因为(.*)匹配了不可见的\b,所以应用1楼的代码没有显示出匹配结果,但他匹配的内容包括returned这个单词,而(\w+)他至少匹配的是一个以上的字母或数字,没有匹配returned后面的\b,所以他匹配的显示结果就是这个单词.
在请教一个问题:
正则表达式的pattern吧,是不是从左往右进行匹配,有什么优先匹配的规则吗?我刚学正则,目前也看了一些正则资料,当然目前只是看了一遍,脑子里还是糨糊一个.

newuser 发表于 2010-12-30 16:32:08

回复 10# pcbar
老大,能再帮忙解释吗?希望元旦前对他的理解能上去,也祝福元旦快乐!

pcbar 发表于 2010-12-31 09:11:05

.不可以匹配\b

newuser 发表于 2010-12-31 10:31:59

回复 13# pcbar
老大10楼的帖子下划线部分不是: \b$部分吗?
另外我对:
.通常可以匹配除了\n之外的任意单个字符
理解也应该是出现了错误.
所以 . 除了不能匹配 \n\b,也应该不能匹配 \s\t \f \v,对吗?

afan 发表于 2010-12-31 12:13:37

回复pcbar
老大10楼的帖子下划线部分不是: \b$部分吗?
另外我对:
.通常可以匹配除了\n之外的任意单 ...
newuser 发表于 2010-12-31 10:31 http://www.autoitx.com/images/common/back.gif


    \b、 $、^ 等只是匹配位置(空隙),不包含任何字符,该了了吧~
页: [1] 2
查看完整版本: [已解决]正则:匹配字符串中最后一个单词的问题?