1

以下をどのように解析しますか:

wr("website-url.com</span>")

HTMLコードからの正規表現で?

を抽出する方法がわかりませんwebsite-url.com

HTML 内にある JavaScript 全体:

<script type="text/javascript">wr("<span>maddog");wr("@");wr("website-url.com</span>")</script>

次のような正規表現を試しました:

wr("(.+?)\s*<\/span>")

しかし、それを機能させることはできません

4

4 に答える 4

0
string a = <script type="text/javascript">wr("<span>maddog");wr("@");wr("website-url.com</span>")</script>;
string[] b= a.replace("script type="text/javascript">","").replace("</script>","").split(';').ToArray();
string c = b.Last();
string d = c.replace("wr(","").replace("</span","");

dが最終結果ですが、文字列内の二重引用符を処理するようにコードを変更できます。

于 2012-10-23T20:58:27.157 に答える
0

アイデアは次のとおりです。

  • 1 つの正規表現ですべての wr(*) 文字列を取得します。
  • 引用符 (") を削除します
  • 取り外し<span></span>

これがPythonでの解決策です。

import re

def geturl(text):
    '''
    Get all the wr(*) strings.
    Remove quotes.
    Remove <span> and </span>
    '''
    regex = re.compile(r'wr\(([^)]*)\)')
    match = regex.findall(xx)
    url = ''.join([s.replace('"', '') for s in match])
    url = url.replace('<span>', '').replace('</span>', '')
    return url

if __name__ == '__main__':
    xx = '''<script type="text/javascript">wr("<span>maddog");wr("@");wr("website-url.com</span>")</script>'''
    url = geturl(xx)
    print url

与えるmaddog@website-url.com

于 2012-10-23T21:38:45.763 に答える
0

この JavaScript を取得したサイトは、HTML を解析することを望んでいないようです。javascript 関数で動的な html を作成しますwr。以下は、この JavaScript を実行し、結果のコードを解析するコードです。ただし、これがトレースするための単純なコードであるとは言えません

public void Test()
{
    //C# object which will be accessed by javascript
    var csharpObj = new MyCSharpObject();

    //Create Javascript object
    Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));
    dynamic obj = Activator.CreateInstance(scriptType, false);
    obj.Language = "Javascript";
    obj.AddObject("csharp", csharpObj);

    //Load Html (your string in question)
    string html = @"<script type=""text/javascript"">wr(""<span>maddog"");wr(""@"");wr(""website-url.com</span>"")</script>";
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);

    //Create "wr" function
    string script = "function wr(s){csharp.wr(s);}";

    //Get the text of script tag                
    script += doc.DocumentNode.SelectSingleNode("//script").InnerText;

    //Execute script
    obj.Eval(script);

    //Load the string created by javascript execution
    doc.LoadHtml(csharpObj.Output);

    //tada.....
    var eMailAddress = doc.DocumentNode.InnerText;

    Console.WriteLine(eMailAddress);
}

[ComVisible(true)]
public class MyCSharpObject
{
    public string Output = "";
    public void wr(string s)
    {
        Output += s;
    }
}

- - - - 編集 - - - -

「すべての wr(*) 文字列を取得する」の書き方がわかりません

このようなソリューションが必要なようですが、HTMLを解析するために正規表現に依存しません

public void Test2()
{
    string html = @"<script type=""text/javascript"">wr(""<span>maddog"");wr(""@"");wr(""website-url.com</span>"")</script>";

    var parsedHtml = String.Join("",Regex.Matches(html, @"wr\(\""(.+?)\""\)")
                                            .Cast<Match>()
                                            .Select(m => m.Groups[1].Value));

    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(parsedHtml);
    var eMailAddress = doc.DocumentNode.InnerText;
}
于 2012-10-23T21:19:12.553 に答える
-1

正規表現を使用してHTMLを解析している場合は、簡単な方法と同じように難しい方法を実行している可能性があります。C#では、HTMLAgilityPackを使用してみてくださいこの問題に関する決定的な質問も参照してください。

于 2012-10-23T20:41:22.467 に答える