2011-12-05 4 views
-1

に関するヘルプが必要な場合、私はは正規表現

<html> 
<Head> 
<link type="text/css" href="c1.css" rel="stylesheet" /> 
<link type="text/css" href="c2.css" rel="stylesheet" /> 
<link type="text/css" href="c3.css" rel="stylesheet" /> 
<link type="text/css" href="c4.css" rel="stylesheet" /> 
<link type="text/css" href="c5.css" rel="stylesheet" /> 

<script type="text/javascript" src="j1.js"></script> 
<script type="text/javascript" src="j2.js"></script> 
</Head> 

<body> 

<script type="text/javascript" src="j3.js"></script> 
<script type="text/javascript" src="j4.js"></script> 

</body> 
</html> 

最初私は、すべてのリンクタグの詳細と第二の正規表現は、すべてのスクリプトタグの詳細を私に返します。私を返します。正規表現を使用するようなHTMLがあるとします。私はGoogleを検索しますが、 は適切なものが得られません。 2つの正規表現パターンを知っている人なら、私に知らせてください。ありがとう

+0

どのような '詳細'をしたいですか?属性の1つ?タグ全体? – Connell

+3

正規表現を使うのは良い考えだと思いますか? –

+3

なぜ正規表現を使用する必要がありますか? HTMLパーザを使用できないのはなぜですか? – CanSpice

答えて

2

他人からコメントをいただきましたので、正規表現でHTMLを解析しようとするのは良い方法ではないかもしれませんが、これはあなたが求めていたものです。だからここに私達は行く:

`link`タグのための正規表現

@"(?ix)" + 
@"<link\s*type=\x22(?'type'.*?)\x22\s*" + 
@"href=\x22(?'href'.*?)\x22\s*" + 
@"rel=\x22(?'rel'.*?)\x22\s*" + 
@"\/>"; 

` script`タグのための正規表現

@"(?ix)" + 
@"<script\s*type=\x22(?'type'.*?)\x22\s*" + 
@"src=\x22(?'src'.*?)\x22\s*" + 
@"><\/script>"; 

例は

あなたはあなたのHTMLを持っていると仮定すると文字列型の変数:

public const string LINK_PATTERN = 
         @"(?ix)" + 
         @"<link\s*type=\x22(?<type>.*?)\x22\s*" + 
         @"href=\x22(?<href>.*?)\x22\s*" + 
         @"rel=\x22(?<rel>.*?)\x22\s*" + 
         @"\/>"; 

public const string SCRIPT_PATTERN = 
         @"(?ix)" + 
         @"<script\s*type=\x22(?<type>.*?)\x22\s*" + 
         @"src=\x22(?<src>.*?)\x22\s*" + 
         @"><\/script>"; 

static void Main(string[] args) 
{ 
    string html = getBody(); 

    Regex links = new Regex(LINK_PATTERN); 
    Regex scripts = new Regex(SCRIPT_PATTERN); 

    foreach (Match link in links.Matches(html)) 
    { 
     Console.WriteLine("<link>: " + link); 

     Console.WriteLine("\ttype: " + link.Groups["type"]); 
     Console.WriteLine("\thref: " + link.Groups["href"]); 
     Console.WriteLine("\trel: " + link.Groups["rel"]); 

     Console.WriteLine(""); 
    } 

    foreach (Match script in scripts.Matches(html)) 
    { 
     Console.WriteLine("<script>: " + script); 

     Console.WriteLine("\ttype: " + script.Groups["type"]); 
     Console.WriteLine("\tsrc: " + script.Groups["src"]); 

     Console.WriteLine(""); 
    } 

    Console.ReadKey(); 
} 

public static string getBody() 
{ 
    string html = ""; 

    html += "<html>"; 
    html += "<head>"; 
    html += "<link type=\"text/css\" href=\"c1.css\" rel=\"stylesheet\" />"; 
    html += "<link type=\"text/css\" href=\"c2.css\" rel=\"stylesheet\" />"; 
    html += "<link type=\"text/css\" href=\"c3.css\" rel=\"stylesheet\" />"; 
    html += "<link type=\"text/css\" href=\"c4.css\" rel=\"stylesheet\" />"; 
    html += "<link type=\"text/css\" href=\"c5.css\" rel=\"stylesheet\" />"; 
    html += "<script type=\"text/javascript\" src=\"j1.js\"></script>"; 
    html += "<script type=\"text/javascript\" src=\"j2.js\"></script>"; 
    html += "<body>"; 
    html += "<script type=\"text/javascript\" src=\"j3.js\"></script>"; 
    html += "<script type=\"text/javascript\" src=\"j4.js\"></script>"; 
    html += "</body>"; 
    html += "</html>"; 

    return html; 
} 
1

HTMLを正規表現で解析するのは良い考えではありません。実際のパーサーではそれを正しく行う必要があります。

あなたが与えられた最初の例のテキストで動作させることは可能ですが、次に解析する必要がある次のテキストのすべての「特殊なケース」をカバーするために変更するすべての目覚しい瞬間を費やすように見えます。

2

This答えは、あなたが探しているものです。 regexesでHTMLを解析しようとしないでください。