求个正则表达式,有点难,拜托了
<input type="hidden" name="idItem1" value="14">
<input type="hidden" name="idItem2" value=16>
input type="hidden" name="idItem3" value="带引号的中文">
<input type="hidden" name="idItem4" value=不带引号的中文>
用正则取出网页中input的value值,如上所示
例如取出的结果是
14
16
带引号的中文
不带引号的中文
如果value中只有英文字母和数字,这个我能取出来,但value里面的值是中文的话,这个正则我就不会写了~~望高手指点,拜托了~~
问题点数:50、回复次数:11Top
1 楼Qqwwee_Com(http://qqwwee.com)回复于 2005-12-05 13:01:03 得分 0
value=["]*(?<value>[^\">]*)["]*
随便写了一个,可以符合你目前的要求
但是不能符合所有的要求。
#region 广告开始
CSDN小助手 V2.5,更快、更爽、更方便的浏览CSDN论坛!
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
下载:http://szlawbook.com/csdnv2
***
我们每回答一个问题,
就谋杀了提问者一个思考的机会,
而这个思考的机会可能让他获得10倍的知识,
所以,我们不下地狱谁下地狱?
***
#endregionTop
2 楼swordragon(古道热肠)回复于 2005-12-05 13:13:48 得分 5
string str40 = "input type='hidden' name='idItem' value=14";
Regex r40 = new Regex(@"input[\s\S]*?value=(?<value>[\d]*?)?",RegexOptions.IgnoreCase);Top
3 楼gaoranaa()回复于 2005-12-05 13:41:23 得分 0
swordragon(古道热肠) 的不准确
得出的结果是"input type="hidden" name="idItem1" value="啊
我要的结果是value里面的值~Top
4 楼sswater(光杆兵)回复于 2005-12-05 14:02:00 得分 0
表达式:
<input.+?value=(("|')?)([^>]*)\1.*?>
测试工具:
http://www.regexlab.com/zh/workshop.asp?pat=%3Cinput.%2B%3Fvalue%3D%28%28%22%7C%27%29%3F%29%28%5B%5E%3E%5D*%29%5C1.*%3F%3E&txt=%3Cinput%20type%3D%22hidden%22%20name%3D%22idItem1%22%20value%3D%2214%22%3E%0D%0A%3Cinput%20type%3D%22hidden%22%20name%3D%22idItem2%22%20value%3D%27%u5E26%u5355%u5F15%u53F7%27%3E%0D%0A%3Cinput%20type%3D%22hidden%22%20name%3D%22idItem3%22%20value%3D%22%u5E26%u53CC%u5F15%u53F7%22%3E%0D%0A%3Cinput%20type%3D%22hidden%22%20name%3D%22idItem4%22%20value%3D%u4E0D%u5E26%u5F15%u53F7%3ETop
5 楼sswater(光杆兵)回复于 2005-12-05 14:05:36 得分 0
纠正:中间再写一个了 "?"
<input.+?value=(("|')?)([^>]*?)\1.*?>Top
6 楼gaoranaa()回复于 2005-12-05 14:54:34 得分 0
Regex r = new Regex(@"(<input.+?value=(("|')?)([^>]*)\1.*?>)",RegexOptions.IgnoreCase|RegexOptions.Compiled);
这样不行啊,楼上Top
7 楼sswater(光杆兵)回复于 2005-12-05 14:59:27 得分 0
表达式中的 "\1" 要对第一个括号匹配的"引号"进行引用,如果你在外层又加了一层括号,那么需要用 "\2" 才能表示引用到匹配引号的地方。
有关于这一点的详细解释,推荐参考正则表达式文档中的 "2.2 反向引用" 章节:
http://www.regexlab.com/zh/regref.htm
使用 "反向引用" 是为了既能匹配单引号,又能匹配双引号。Top
8 楼sswater(光杆兵)回复于 2005-12-05 15:04:54 得分 0
使用 "\1", "\2" 的方法来反向引用被广泛支持。
.NET 的正则表达式还支持命名的反向引用,而不是使用括号的序号来引用,这种方法不受外层括号而影响到引用效果。详情请参考 MSDN。Top
9 楼gaoranaa()回复于 2005-12-05 15:17:15 得分 0
能不能用Regex r = new Regex(@"(<
这种方式帮我写呢,你写的那个我套进去出了一堆错误,根本不知道该怎么改啊Top
10 楼sswater(光杆兵)回复于 2005-12-05 18:05:55 得分 45
不是表达式本身的问题,是字符串常量在代码中的书写问题:
如果用 "@" 开头的字符串,那么,字符串中的 " 在代码中应该写成 ""
Regex r = new Regex(@"<input.+?value=((""|')?)([^>]*)\1.*?>", RegexOptions.IgnoreCase|RegexOptions.Compiled);
如果没有 "@" 开头,那么字符串中的 " 在代码中应该写成 \" ,而 \ 应该书写成 \\
Regex r = new Regex("<input.+?value=((\"|')?)([^>]*)\\1.*?>", RegexOptions.IgnoreCase|RegexOptions.Compiled);
前面两种写法都是可以的。
后边的代码:
String s = "<input type=\"hidden\" name=\"idItem1\" value=\"14\">";
Match m = r.Match(s);
System.Console.Out.WriteLine( m.Groups[3] );
Top
11 楼sswater(光杆兵)回复于 2005-12-05 18:09:02 得分 0
字符串中的引号的书写问题。
因为字符串用引号来标注开始和结束,因此,如果字符串的内容中有引号,这个引号就要特殊表示噻。楼主可能是一时急了,没有注意到。Top




