2011-02-16 51 views
1

你好 我想在某些HTML源代码中保存输入标记的值。 标签看起来就像这样:VB.net基本正则表达式问题

<input name="user_status" value="3" /> 

我有一个变量(pageSourceCode)页面的源代码,并需要制定出一些正则表达式来获得(在本例中3)的值。 我有这个至今:

Dim sCapture As String = System.Text.RegularExpressions.Regex.Match(pageSourceCode, "\<input\sname\=\""user_status\""\svalue\=\""(.*)?\""\>").Groups(1).Value 

的正常工作的大部分时间,但是这个代码是用来处理来自多个网站的源代码(即使用同一平台),有时也有包括在其他属性输入标签,或他们在不同的顺序,例如:

<input class="someclass" type="hidden" value="3" name="user_status" /> 

我只是不明白正则表达式足以应付这些情况。

非常感谢任何帮助。

PS虽然我寻找一个特定的回答这个问题,如果可能的话,一个指向一个良好的正则表达式的教程将是巨大的,以及

感谢

+0

你可能想看看这个民间传说的问题:) http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – 2011-02-16 16:20:03

+0

呀,即时通讯使用htmlAgility Pack进行调查,但对于这个小型项目来说,这看起来似乎过度了。 – Steve 2011-02-16 17:12:29

回答

1

如果您input您可以搜索<input[^>]*\bvalue="([^"]+)"标签从不包含尖括号。

[^>]*匹配除>之外的任意数量的字符,它们保持正则表达式不会意外地匹配标签。

\b确保我们只匹配value而不是像x_value

编辑:

如果你只是想看看input标签,其中name="user_status",那么你就可以做到这一点有附加lookahead assertion

<input(?=[^>]*name="user_status")[^>]*\bvalue="([^"]+)" 

在VB.NET:

ResultString = Regex.Match(SubjectString, "<input(?=[^>]*user_status=""name"")[^>]*\bvalue=""([^""]+)").Groups(1).Value 

一个很好的教程可以在http://www.regular-expressions.info

+0

谢谢,现在看教程。你的例子有所帮助,但不幸的是,第一个标签(很多)不是名字=“user_status”。我想知道是否最好抓住整个标签(如果它包含“user_status”),然后运行第二个正则表达式来获取值? – Steve 2011-02-16 17:15:30

0

假设这是一个ASP.Net页面,而不是一些外部HTML,那么您无法控制更好的解决方案就是访问该控件。

添加一个ID字段到你的输入控件和一个runat =“server”像这样。

<input id="user_status" runat="server" class="someclass" type="hidden" value="3" name="user_status" /> 

你也许可以摆脱名称字段。它通常与ID字段相同,ID是更好的选择。如果你愿意,你实际上可以同时拥有一个ID和Name字段,并且它们都可以是相同的值。

在你的代码背后,你可以通过ID访问值而不需要正则表达式。

Me.user_status.value