正则表达式(?:(\w)\1)+的含义是什么?请大侠支招。谢谢!

hengshan 2007-04-19 11:14:08
我在学习正则表达式,一篇文章是这么写的:

3.4 括号 "( )" 内的子表达式,如果希望匹配结果不进行记录供以后使用,可以使用 "(?:xxxxx)" 格式

举例1:表达式 "(?:(\w)\1)+" 匹配 "a bbccdd efg" 时,结果是 "bbccdd"。括号 "(?:)" 范围的匹配结果不进行记录,因此 "(\w)" 使用 "\1" 来引用。

我没有明白其中的意思。
...全文
393 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hengshan 2007-04-21
  • 打赏
  • 举报
回复
哦,明白
谢谢!
接分!
iambic 2007-04-20
  • 打赏
  • 举报
回复
比如字符串1234abcd:你用正则表达式(\d+)(\D+)匹配,$1的内容是1234,$2的内容是abcd;如果你用(?:\d+)(\D+)匹配,$1的内容是abcd,$2没有内容。也就是说(?:)内的匹配不进行记录。
iambic 2007-04-20
  • 打赏
  • 举报
回复
(?:)这个括号是用来改变优先级的,没有记忆功能,不会映射到$1或者$n。
hengshan 2007-04-20
  • 打赏
  • 举报
回复
比如字符串1234abcd:你用正则表达式(\d+)(\D+)匹配,$1的内容是1234,$2的内容是abcd;如果你用(?:\d+)(\D+)匹配,$1的内容是abcd,$2没有内容。也就是说(?:)内的匹配不进行记录。

按照你的意思,那$1应该没有内容,$2才是abcd,才对吧。因为,这个$1和$2是按照括号的顺序往下排的呀。
hengshan 2007-04-19
  • 打赏
  • 举报
回复
关键是“,如果希望匹配结果不进行记录供以后使用,可以使用 "(?:xxxxx)" 格式”这句话,我难以理解。匹配后不进行记录是什么意思?那如果记录了,又会是什么样的结果呢?
iambic 2007-04-19
  • 打赏
  • 举报
回复
正则表达式这个东西,多写写就好了。
iambic 2007-04-19
  • 打赏
  • 举报
回复
(\w)\1 #匹配两个连续且相同的字符,如aa
(?:(\w)\1)+ #如上,匹配N次,N > 1

37,722

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧