请解释这个正则表达式

时间:2009-11-16 02:42:49

标签: c# regex

我有正则表达式:

@"<img\s*[^>]*>(?:\s*?</img>)?

有人可以解释这一部分:(?:\ s *?)?

那是什么?

4 个答案:

答案 0 :(得分:9)

匹配但不捕获任意数量的空格,后跟一个关闭图像标记,零次或一次:

(?: = match but don't capture

\s*? = any number of whitespace (not greedy)

</img> = close image tag

)? = zero or one times

:)

答案 1 :(得分:1)

(?:\s*?)选择图像标记之后的任何空格(如果存在)。开头的?:告诉正则表达式引擎不捕获该组(意味着它不会在匹配数组中返回)

答案 2 :(得分:0)

任意数量的空白字符的非捕获组,后跟关闭的img标记

答案 3 :(得分:0)

整个表达式将捕获具有相应<img>标记的任何</img>标记(但不会捕获关闭标记)。它不捕获close标签,因为(?:)语法意味着“匹配但不捕获”。

这个正则表达式的一些限制:

  1. 开始标记中的\s*是多余的,因为[^>]*也会捕获此内容
  2. 开始和结束标记之间只允许有空格
  3. 一些例子:

    • <img>匹配
    • <img></img>将匹配,但仅捕获<img>
    • <img attr="123"></img>将匹配,但仅捕获<img attr="123">
    • <imgabc></img>匹配
    • <img> </img>将匹配,但仅捕获<img>
    • <img>ab</img>匹配

    我强烈推荐使用www.radsoftware.com.au免费提供的正则表达式设计器来测试正则表达式

相关问题