qq271859852 发表于 2012-1-3 14:00:07

【正则表达式】匹配问题求助{已解决}

本帖最后由 qq271859852 于 2012-1-8 11:37 编辑

\bhi\b.*\bLucy\b   :先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词

请问上术表达式为何不能匹配   hiaLucy   
请懂得的朋友问我解达一下。谢谢

user3000 发表于 2012-1-3 15:54:42

原因就在 'hi' 后面接个参数 \b
\b 代表一个单词的结尾, 何为单词?
hia Lucy里 hi, a, Lucy都是单词,但你举的例子里, 只有 hiaLucy 这个单词!
单词是一个整体!

autt 发表于 2012-1-3 18:27:45

.*这样不好吗

bdancerlc 发表于 2012-1-4 15:12:48

\b 是单词边界的限制,hiaLucy 是个整体...被识别为一个单词了..
而你的表达式中设置的是两个单词,所以不能匹配,建议LZ查一下正则的帮助文档...

Ycxw2008 发表于 2012-1-4 15:38:58

本帖最后由 Ycxw2008 于 2012-1-4 15:40 编辑

如果上面楼主还不明白,下面这段应该就好理解点了把


1      概述

“\b”匹配单词边界,不匹配任何字符。

“\b”匹配的只是一个位置,这个位置的一侧是构成单词的字符,另一侧为非单词字符、字符串的开始或结束位置。“\b”是零宽度的。

基本上所有的资料里都会说“\b”是单词边界,但是关于“单词”的范围却是少有提及。通常情况下,正则表达式中所谓的“单词”,就是由“\w”所定义的字符所组成的子串。

“\b”表示所在位置的一侧为单词字符,另一侧为非单词字符、字符串的开始或结束位置,也就相当于

(?<!\w)(?=\w)|(?<=\w)(?!\w)

思考:以下写法为什么不等价于“\b”

(?<=\W)(?=\w)|(?<=\w)(?=\W)
2       \w的范围

即然涉及到“\w”,那就要先考察一下它的范围。

在支持ASCII码的语言中,如JavaScript,“\w”等价于 ;

在支持Unicode的语言中,如.NET,默认情况下,“\w”除可以匹配外,还可以匹配一些Unicode字符集,如汉字,全角数字等等。

几乎所有常见的语言都遵循这样一个规律,只有Java是个例外。在Java中,“\w”的表现是比较奇怪的,Java是支持Unicode的,但Java的正则中的“\w”却是等价于的。

hzxymkb 发表于 2012-1-4 15:42:03

我发现有正则等字出现的帖子afan必定出现!

qq271859852 发表于 2012-1-8 11:35:41

回复 5# Ycxw2008


    明白了,谢谢

qq271859852 发表于 2012-1-8 11:36:21

回复 2# user3000


    懂得什么是单词了,谢谢。我对AU3帮助文档里的对"\b"的描述不是很明白才产生这样的误区
页: [1]
查看完整版本: 【正则表达式】匹配问题求助{已解决}