C#中正则表达式的\1的用法?

chaney 2006-12-24 01:15:28
(d)\1以匹配“dd”,
但是
(\d{1,2}):\1:\1无法匹配01:11:21
什么原因?
...全文
317 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyq1986 2006-12-24
  • 打赏
  • 举报
回复
(\d{1,2}):\1:\1匹配01:01:01
\1是指和模式字符串中的第一个()内的一样
liujia_0421 2006-12-24
  • 打赏
  • 举报
回复
(\d{1,2}):\1:\1
只能匹配类似这样三段相同的,比如:
01:01:01

改成这样:
\d{1,2}:\d{1,2}:\d{1,2}
liujia_0421 2006-12-24
  • 打赏
  • 举报
回复
这样用似乎达不到目的..
任亚军 2006-12-24
  • 打赏
  • 举报
回复
(\d{1,2}):1:1
believefym 2006-12-24
  • 打赏
  • 举报
回复
(\d{1,2}):\d\1:\d\1
azurebz 2006-12-24
  • 打赏
  • 举报
回复
帮顶,学习
-过客- 2006-12-24
  • 打赏
  • 举报
回复
表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候,小括号包含的表达式所匹配到的字符串可以单独获取。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界时,必须使用小括号来指定所要的范围。比如 "<td>(.*?)</td>"。

其实,"小括号包含的表达式所匹配到的字符串" 不仅是在匹配结束后才可以使用,在匹配过程中也可以使用。表达式后边的部分,可以引用前面 "括号内的子匹配已经匹配到的字符串"。引用方法是 "\" 加上一个数字。"\1" 引用第1对括号内匹配到的字符串,"\2" 引用第2对括号内匹配到的字符串……以此类推,如果一对括号内包含另一对括号,则外层的括号先排序号。换句话说,哪一对的左括号 "(" 在前,那这一对就先排序号。

举例如下:

举例1:表达式 "('|")(.*?)(\1)" 在匹配 " 'Hello', "World" " 时,匹配结果是:成功;匹配到的内容是:" 'Hello' "。再次匹配下一个时,可以匹配到 " "World" "。

举例2:表达式 "(\w)\1{4,}" 在匹配 "aa bbbb abcdefg ccccc 111121111 999999999" 时,匹配结果是:成功;匹配到的内容是 "ccccc"。再次匹配下一个时,将得到 999999999。这个表达式要求 "\w" 范围的字符至少重复5次,注意与 "\w{5,}" 之间的区别。

举例3:表达式 "<(\w+)\s*(\w+(=('|").*?\4)?\s*)*>.*?</\1>" 在匹配 "<td id='td1' style="bgcolor:white"></td>" 时,匹配结果是成功。如果 "<td>" 与 "</td>" 不配对,则会匹配失败;如果改成其他配对,也可以匹配成功。

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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