询问根据input name找到input value值的正则写法?

jadesun 2009-08-27 09:33:09

public static string GetInputValueByName(string Code,string inputname)
{
string name,value = "";
string str = "";
string code = @"<Form>
<input type='hidden' value='1' name='rs_permission'/>
<input type='hidden' value='12298802,12537683,12815699' name='apn'/>
<input type='text' value='abcdefg' name='d_name' >
</Form>";

Regex reg = new Regex(这里的正则怎么写?, RegexOptions.IgnoreCase);

MatchCollection mc = reg.Matches(str);
foreach (Match m in mc)
{
name = m.Groups["name"].ToString();
value = m.Groups["value"].ToString();
if (name.Equals(inputname))
str = value;
}

return str;
}
...全文
300 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jadesun 2009-08-28
  • 打赏
  • 举报
回复
这样子就能变成一个很通用的取input的正则表达式了。
jadesun 2009-08-28
  • 打赏
  • 举报
回复
感谢大家的回复,尤其感谢lxcnn的耐心解答。
youdandan 2009-08-28
  • 打赏
  • 举报
回复
xue習
jadesun 2009-08-27
  • 打赏
  • 举报
回复
<input type='hidden' value='1' name='rs_permission'/>

查找 name 和 value 的值的正则
whowhen21 2009-08-27
  • 打赏
  • 举报
回复
楼上正解。。

****************************************************************
看帖一定要回的,分也一定要接的。^_^
****************************************************************
-过客- 2009-08-27
  • 打赏
  • 举报
回复
如果规则就如你的例子,value和name的顺序是一定的,那就很简单了
string code = @"<Form>
<input type='hidden' value='1' name='rs_permission'/>
<input type='hidden' value='12298802,12537683,12815699' name='apn'/>
<input type='text' value='abcdefg' name='d_name' >
</Form>";
Regex reg = new Regex(@"(?is)<input\b(?:(?!value=).)*value='(?<value>[^']*)'\s+name='(?<name>[^']*)'[^>]*>");
MatchCollection mc = reg.Matches(code);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["name"].Value + "\n";
richTextBox2.Text += m.Groups["value"].Value + "\n";
}


如果情况考虑复杂点,value和name可能还有其它属性,value=和name=后可能接“'”,“"”或直接接属性值,那么
string code = @"<Form>
<input type='hidden' value='1' name='rs_permission'/>
<input type='hidden' value='12298802,12537683,12815699' name='apn'/>
<input type='text' value='abcdefg' name='d_name' >
</Form>";
Regex reg = new Regex(@"(?is)<input\b(?:(?!value=).)*value=(['""]?)(?<value>(?:(?!\1).)*)(?:(?!name=).)*name=(['""]?)(?<name>(?:(?!\2).)*)[^>]*>");
MatchCollection mc = reg.Matches(code);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["name"].Value + "\n";
richTextBox2.Text += m.Groups["value"].Value + "\n";
}



如果顺序不一定,那会麻烦些

string code = @"<Form>
<input type='hidden' value='1' name='rs_permission'/>
<input type='hidden' value='12298802,12537683,12815699' name='apn'/>
<input type='text' value='abcdefg' name='d_name' >
</Form>";
Regex reg = new Regex(@"(?is)<input\b(?=(?:(?!value=|/?input).)*value=(['""]?)(?<value>(?:(?!\1).)*)\1)(?:(?!name=).)*name=(['""]?)(?<name>(?:(?!\2).)*)\2[^>]*>");
MatchCollection mc = reg.Matches(code);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["name"].Value + "\n";
richTextBox2.Text += m.Groups["value"].Value + "\n";
}
编程有钱人了 2009-08-27
  • 打赏
  • 举报
回复
你想要什么正则?
LixingTie 2009-08-27
  • 打赏
  • 举报
回复
string pattern = "(<input.*?name='(?<Name>[^']+?)'.*?value='(?<Value>[^']+?)'.*?>)|(<input.*?value='(?<Value>[^']+?)'.*?name='(?<Name>[^']+?)'.*?>)";
LixingTie 2009-08-27
  • 打赏
  • 举报
回复

public string FindValueByName(string str, string inputname)
{
string pattern = "(<input.*?name='(?<Name>[^']+?)'.*?value='(?<Value>[^']+?)'.*?>)|(<input.*?value='(?<Value>[^']+?)'.*?name='(?<Name>[^']+?)'.*?>)";
Match match = Regex.Match(str, pattern);
while (match.Success)
{
string name = match.Groups["Name"].ToString();
string value = match.Groups["Value"].ToString();
if (name == inputname)
return value;
match = match.NextMatch();
}
return string.Empty;
}
jadesun 2009-08-27
  • 打赏
  • 举报
回复
顶上去

110,536

社区成员

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

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

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