我正在尝试这个正则表达式.. 但没有在代码中得到所需的结果..
<script[\s\w="'/]*src\s*=\s*['"]([\w/\.\d\s-]*)["']>|<link[/\s\w="\d]*href=['"]([\.\d\w\\/-]*)['"][\s\w="'/]*>
这是我的模式..
string pattern = @"<script\s[\d\s\w='";
pattern += "\"/]*";
pattern += @"src\s*=\s*['" + "\"]";
pattern += @"([\w/\.\d\s-]*)['" + "\"]>";
pattern += "|";
pattern += @"<link[/\s\w=\d" + "\"]*";
pattern += "href['\"](" + @"[\.\d\w/"+ Regex.Escape("\\") + "-]*)";
pattern += "['\"]" + @"[\s\w='/" + "\"]*>";
只是因为你找到了错误..为什么它在C#中不能正常工作 虽然测试都在以下链接上清除: http://regexr.com/3admv
可以肯定的是,这是代码:
string url = "http://www.uok.edu.pk";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string html = reader.ReadToEnd();
Regex regex = new Regex(GetDirectoryListingRegexForUrl(url));
MatchCollection matches = regex.Matches(html);
if (matches.Count > 0)
{
foreach (Match match in matches)
{
if (match.Success)
{
Console.WriteLine("***************");
Console.WriteLine(match.ToString());
}
}
}
}
Console.ReadLine();
}
如果您可以帮助我,请给我字符串模式以正确解析我在link中提供的html。 我似乎无法通过此正则表达式获取链接href。 感谢您的帮助:))
答案 0 :(得分:3)
您可以通过将引号字符加倍来转义它们:
string pattern = @"<script[\s\w=""'/]*src\s*=\s*['""]([\w/\.\d\s-]*)[""']>|<link[/\s\w=""\d]*href=['""]([\.\d\w\\/-]*)['""][\s\w=""'/]*>";
TextReader reader = File.OpenText("texttoparse.txt");// I put text from your example in this file
string txt = reader.ReadToEnd();
var matches = Regex.Matches(txt, pattern);
foreach (Match match in matches)
{
if (match.Success)
{
Console.WriteLine("***************");
Console.WriteLine(match.ToString());
}
}
输出(与RegExr测试相同):
***************
<link rel="import" href="component.html" >
***************
<link rel="stylesheet" href="css/style.css">
***************
<script src="js/script.js">
***************
<link rel="import" href="component.html">
***************
<link href="css/style-original.css" rel="stylesheet" type="text/css">
***************
<link href="css/style-original.css" rel="stylesheet" type="text/css" />
***************
<script type="text/javascript" src="/js/jquery.js">
***************
<script type="text/javascript" src="/js/cufon-yui.js">
***************
<script type="text/javascript" src="/js/arial.js">
***************
<script type="text/javascript" src="/js/chilli.js">
***************
<script type="text/javascript" src="/js/cycle.js">
***************
<script type="text/javascript" src="/js/functions.js">
***************
<script type="text/javascript" src="/js/fancybox.js">
答案 1 :(得分:2)
您似乎只想从HTML标记中提取“href”和“src”属性值。您可以使用正则表达式:
<(?:script|link)[^<]*?\s(?:src|href)=(?<quot>['"])(?<result>(?>(?!\k<quot>).)+)\k<quot>
由于我们永远不知道HTML代码中是否使用单引号或双引号,我们可以捕获第一个((?<quot>['"])
),然后捕获与它不相等的所有内容((?<result>(?>(?!\k<quot>).)+)\k<quot>
)
您也可以将其拆分为单独的替代方案,命名捕获的组在C#中很棒:
<script[^<]*?\ssrc=(?<quot>['"])(?<result>(?>(?!\k<quot>).)+)\k<quot>|<link[^<]*?\shref=(?<quot>['"])(?<result>(?>(?!\k<quot>).)+)\k<quot>
$ {result} 会保留您的数据。