正则表达式问题:如何理解/href\s*=\s*(?:"(?<1>[^"]*)"|(?<1>\S+))/

JackWu 2003-02-21 10:12:54
初学正则表达式,请大家指教。

我查看了msdn的正则表达式帮助:
ms-help://MS.VSCC/MS.MSDNVS.2052/jscript7/html/jsjsgrpregexpsyntax.htm
该文虽有解释, 但没有样例,对我这样的初学者来说很难理解

在msdn上看到:href\s*=\s*(?:"(?<1>[^"]*)"|(?<1>\S+)),该正则表达式匹配字符串中的形如href="..."的链接。msdn没有解释该表达式的语法, 以下是我初步的问题

1. (?:"(....\S+))这一部分是什么意思

在msdn上说明(?:pattern)为:
"匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用“或”字符 (|) 组合模式部件的情况很有用。例如,“industr(?:y|ies)”这一表达式比“industry|industries”更经济。

以上这些话很难理解, 那么在这里pattern是"(?<1>[^"]*)"|(?<1>\S+), 该怎么解释呢

同样msdn对(pattern)(?=pattern)(?!pattern)之类的解释,我也不太理解

2. (?<1>[..这部分中<1>是什么意思, 在msdn上我没看到<n>这种语法

3. 网上有关于正则表达式的中文教程吗

我在网上查这方面的资料, 发现大多是实用型的, 即告诉你匹配什么什么用怎样怎样的正则表达式, 但不解释为什么这这样. 大家有关于这方面的好的资料吗

...全文
342 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiushuiwuhen 2003-02-21
  • 打赏
  • 举报
回复
?:表示匹配但不获取,如果不用,会多获取几个匹配,占用资源。
?<1>引用名称,即表示该获取可以用$1引用,
如果想更好的使用正则,可以看以下连接,希望对你有用
http://expert.csdn.net/Expert/TopicView1.asp?id=1410423

单看一眼,和href\s*=\s*("[^"]"|\S+)区别
只是这个如果有引号会同时匹配到,同时也有$1
上面只是获取""内的内容,复杂了点但有实用

JackWu 2003-02-21
  • 打赏
  • 举报
回复
thanks everybody.
starky 2003-02-21
  • 打赏
  • 举报
回复
限定符
* 指定零个或更多个匹配;例如 \w* 或 (abc)*。与 {0,} 相同。
? 指定零个或一个匹配;例如 \w? 或 (abc)?。与 {0,1} 相同。
saucer 2003-02-21
  • 打赏
  • 举报
回复
try to get hold of this book:

Mastering Regular Expressions, 2nd Edition
By Jeffrey E. Friedl


it explains almost everything you want to know about Regular Expressions, its chapter 9 on .NET is available for download:
http://www.oreilly.com/catalog/regex2/chapter/index.html
老马2008 2003-02-21
  • 打赏
  • 举报
回复
例子:

这段正则表达式了用来验证Email的:^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$
  在这段正则表达式中,“+”表示前面的字符串连续出现一个或多个;“^”表示下一个字符串必须出现在开头,“$”表示前一个字符串必须出现在结尾;“.”也就是“.”,这里“”是转义符;“{2,3}”表示前面的字符串可以连续出现2-3次。“()”表示包含的内容必须同时出现在目标对象中。“[_.0-9a-z-]”表示包含在“_”、“.”、“-”、从a到z范围内的字母、从0到9范围内的数字中的任意字符;
  这样一来,这个正则表达式可以这样翻译:
  “下面的字符必须在开头(^)”、“该字符必须包含在“_”、“.”、“-”、从a到z范围内的字母、从0到9范围内的数字中([_.0-9a-z-])”、“前面这个字符至少出现一次(+)”、@、“该字符串由一个包含在从a到z范围内的一个字母、从0到9范围内的数字中的字符开头,后面跟至少一个包含在“-”、从a到z范围内任何一个字母、从0到9范围内任何一个数字中的字符,最后以.结束(([0-9a-z][0-9a-z-]+.))”、“前面这个字符至少出现一次(+)”、“从a到z范围内的字母出现2-3次,并以它结束([a-z]{2,3}$)”
starky 2003-02-21
  • 打赏
  • 举报
回复
[^aeiou] 与不在指定字符集中的任何单个字符匹配。

[aeiou] 与指定字符集中包含的任何单个字符匹配。

[0-9a-fA-F] 使用连字号 (–) 允许指定连续字符范围。
starky 2003-02-21
  • 打赏
  • 举报
回复
\S 与任何非空白字符匹配。等效于 Unicode 字符类别 [^\f\n\r\t\v\x85\p{Z}]。如果通过 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \S 等同于 [^ \f\n\r\t\v]。
starky 2003-02-21
  • 打赏
  • 举报
回复

ms-help://MS.NETFrameworkSDK.CHS/cpgenref/html/cpconregularexpressionslanguageelements.htm

正则表达式语言元素

111,115

社区成员

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

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

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