日期:2014-05-19  浏览次数:20685 次

Regex rep = new Regex(" (src|href|background|value)=('|\"|)([^('|\"|)http://].*?)('|\"| |>)"); 正则怎么理解啊
Regex   rep   =   new   Regex( "   (src|href|background|value)=( '|\ "|)([^( '|\ "|)http://].*?)( '|\ "|   |> ) ");

------解决方案--------------------
(src|href|background|value)=( '|\ "|)([^( '|\ "|)http://].*?)( '|\ "| |> )

(src|href|background|value) 这是“或”的关系,“src”,“href”,“background”,“value”中的任意一个
= 普通字符
( '|\ "|) 也是“或”的关系, '或 "或者没有,但一般不这样写
[^( '|\ "|)http://] 这个是错误写法,[]不能这样用
使用方括号 [ ] 包含一系列字符,能够匹配其中任意一个字符。用 [^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。

.*? 非贪婪模式,匹配附换行符外的任意多个字符


就整个正则表达式来说,这种写法是错误的

------解决方案--------------------
$加一个数字表示对捕获组的引用

捕获组(exp)指把正则表达式exp匹配到的内容捕获到一个组里,如果这个组没有命名,可以用$加上数字对其引用,$0指全部匹配结果,$1对应第一个“(”及与其配对的“)”之间的正则表达式匹配到的内容,$2同理,可以嵌套,按“(”出现的顺序确定捕获组的序号

上式中
$1对应 (src|href|background|value)
$2对应 ( '|\ "|)
$3对应 ([^( '|\ "|)http://].*?)
$4对应 ( '|\ "| |> )