如何同时匹配src=./xxx/abc.jpg 中的./xxx/。
RegExPattern = @"(?<=.*(src|background)=(""|'))[^<]+/(?=.+)";
上面这个正则表达式可以匹配./xxx/:
src="./xxx/abc.jpg"
src='./xxx/abc.jpg'
但是不能匹配:
src=./xxx/abc.jpg
RegExPattern = @"(?<=.*(src|background)=(""|'))[^<]+/(?=.+)";
上面这个正则表达式可以匹配./xxx/:
src="./xxx/abc.jpg"
src='./xxx/abc.jpg'
但是不能匹配:
src=./xxx/abc.jpg
解决方案 »
- C#发送数据到串口,出错:给定的端口名称未以 COM/com 开头或未解析为有效的串行端口
- DataGridView自动换行问题
- 关于调色板的代码
- sprc_lcl()看到进来,有关你的无限级DropList
- 我要在C#桌面程序的form中嵌入word文档,应该怎么做?谢谢!
- 关于帐号导入的问题急!!!!!!!!
- 能不能实例化一个SqlParameterCollection
- excel中的全部替换功能,用c#代码怎么实现?谢谢各位了。
- 高手请进!C#能在WinForm 中重载自定义控件的方法吗?
- 关于comboBox绑定数据时的问题! (100分,在线等待)
- 求 C#学生管理系统
- C# web开发中如何引用OWC
RegExPattern = @"(?<=.*(src|background)=([""']?))[^<]+/(?=.+)";
结果:
源串是src="./xxx/abc.jpg"时 匹配得到src=./xxx/" 而不是src="./xxx/"
源串是src='./xxx/abc.jpg'时 匹配得到src=./xxx/' 而不是src='./xxx/'
说到底,就是前面那个'或"号去哪里了?
RegExPattern = @"(?<=.*(url\(|src|background)=(""|')?)[^<""']+/(?=.+)";
加了一个url\(
因为有时候是style="BACKGROUND: url('images/01t01.gif'); "
src='./xxx/abc.jpg'
src=./xxx/abc.jpg得到3个match
--------------------------match1
match: src="./xxx/abc.jpg"
group["vpath"] = ./xxx
group["name"] = abc.jpg
--------------------------match2
match: src='./xxx/abc.jpg'
group["vpath"] = ./xxx
group["name"] = abc.jpg
--------------------------match3
match: src=./xxx/abc.jpg
group["vpath"] = ./xxx
group["name"] = abc.jpg测试通过:
你这样的方式可以实现,但是因为程序特殊要求,需要用那种一行解决问题的。还有一个参数没有带。
RegExPattern = @"(?<=.*(url\(|src|background)=(""|')?)[^<""']+/(?=.+)";
加了一个url\(,
因为有时候图片地址会是style="BACKGROUND: url('images/01t01.gif'); "
但是这个正则表达式好像无法处理url('./xxx/abc.jpg')中的参数哦。
foreach(Match m in mc)
{
m.Groups[3].Value;//./xxx/
}
能不能像过客的那种写法?只要能把url('./xxx/abc.jpg')、url("./xxx/abc.jpg")、url(./xxx/abc.jpg)中的对应串取出来就行了。
<TR class=tit style="BACKGROUND: url('images/01t01.gif'); ">
<td width="36"><img border="0" src=images/jjlk11.jpg width="45" height="30"></td>
</TR>
<TR class=tit style="BACKGROUND: url("images/01t02.gif"); ">
<td width="36"><img border="0" src='images/jjlk22.jpg' width="45" height="30"></td>
</TR>
<TR class=tit style="BACKGROUND: url(images/01t03.gif); ">
<td width="36"><img border="0" src="images/jjlk33.jpg" width="45" height="30"></td>
</TR>
</TABLE>
foreach(Match m in mc)
{
m.Groups[3].Value;//url
}
用下面这个 呵呵 因为要下班了乱拼的
(?:style\s*=\s*["']?[^'"]*url\s*\(['"]?(?<vpath>(?:[^/"']*/)*)(?<name>[^'"\)]*)"?[^>]*>|src\s*=\s*["']?(?<vpath>(?:.*/)*)(?<name>[^"'\s> ]*))PS:新年快乐!!
(?:style\s*=\s*["']?[^'"]*url\s*\(['"]?(?<vpath>(?:[^/"']*/)*)(?<name>[^'"\)]*)"?[^>]*>|src\s*=\s*["']?(?<vpath>(?:[^"']*/)*)(?<name>[^"'\s>]*))
这个是两种路径同时处理的情况
MatchCollection mc = Regex.Matches(str, "((src=|url\\()[\"']?)([^\"']+/)(?=.+)", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
m.Groups[3].Value ; //路径./xxx/
}这个是两种情况分别处理的情况
MatchCollection mc = Regex.Matches(str, "((src=[\"']?)([^\"']+/)(?=.+))|(url\\([\"']?([^\"']+/)(?=.+))", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
//注意两个不同时有值,其中一个为空,使用时需先判断一下
m.Groups[3].Value ; //对应于src=./xxx/abc.jpg的路径./xxx/
m.Groups[5].Value ; //对应于url(./xxx/abc.jpg)的路径./xxx/
}
像lxcnn(过客)大哥的那种方式就很好,
我用过过客大哥的下面的这个表达式,
part = @"(?<=.*(src|background)=(""|')?)[^<""']+/(?=.+)";
基本可以实现了:
<img border="0" src="images/jjlk33.jpg" width="45" height="30">
和<td background="./xxx/abc.jpg"></td>
这两种方式的处理,但是:
我在上面的正则表达式里加入:url\(,却无法处理下面的这种情况:
part = @"(?<=.*(url\(|src|background)=(""|')?)[^<""']+/(?=.+)";
无法处理下面这种情况。
<TR class=tit style="BACKGROUND: url(images/01t03.gif); ">
第一步:匹配<TR class=tit style="BACKGROUND: url(images/01t03.gif); ">
正则表达式:RegExPattern = @"(?<=url\s*\([""'])[^<""']+/(?=.+)";
第二步:分别匹配<img border="0" src="images/jjlk33.jpg" width="45" height="30">和<td background="./xxx/abc.jpg"></td>
正则表达式:part = @"(?<=.*(url\(|src|background)=(""|')?)[^<""']+/(?=.+)";mobydick(敌伯威|我排著队拿著爱的号码牌)和gzdiablo() 的方法不错,
但是比起我要实现的这个来,要复杂一些。
过客开始的想法和我是一致的,但是后来就变了。
我一直在郁闷,为什么不能用一个步骤解决呢?
foreach (Match m in mc)
{
m.Groups[3].Value ; //路径./xxx/
}
第一:
style\s*=\s*["']?[^'"]*?url\s*\(['"]?(?<vpath>(?:[^/"']*/)*)(?<name>[^'"\)]*)"?[^>]*>
第二:
src\s*=\s*["']?(?<vpath>(?:[^"']*/)*)(?<name>[^"'\s>]*)呵呵 着急下班偷懒了