2012-03-20 57 views
0

我的程序出了问题,因为当我试图比较两个标签“和Enabled”>“时,它们会提取整个html标签。我希望我的程序要做的是在php中查找标签来源称为mystrings1,看看它们是否存在,然后在每行匹配的mystrings1的同一行上找到值为“enabled”的mystrings2标签,然后提取mystrings1值。像这样:如何比较分割前的值?

[PHP] 
<p id='mystrings1'>user data 1</p><p id="images"> 
<a href="images.php?id=1">Images</a>  </td> | <a href="http://mylink.com">Link</a> </td> | <a href="delete.php?id=1">Delete</a> </td> | <span id="mystrings2">Enabled</td> 
[/PHP] 

这里的表单代码:

#include "StdAfx.h" 
#include "Form1.h" 

using namespace MyProject; 

System::Void Form1::timer1_Tick(System::Object^ sender, System::EventArgs^ e) 
{ 
    timer1->Enabled = false; 
    timer1->Stop(); 

    try 
    { 
     String ^URL1 = "http://mysite.com/myscript.php?user=test&pass=test"; 
     HttpWebRequest ^request1 = safe_cast<HttpWebRequest^>(WebRequest::Create(URL1)); 
     HttpWebResponse ^response1 = safe_cast<HttpWebResponse^>(request1->GetResponse()); 
     StreamReader ^reader1 = gcnew StreamReader(response1->GetResponseStream()); 
     String ^str1 = reader1->ReadToEnd(); 
     String ^pattern1 = "(<p id='mystrings1'>(.*?)</p>(.*?)<span id=\"mystrings2\">Enabled</td>)"; 
     MatchCollection ^matches1 = Regex::Matches(str1, pattern1); 
     Match ^m1 = Regex::Match(str1, pattern1); 

     for each (Match ^x1 in matches1) 
     { 
      array<String^> ^StrArr1 = x1->Value->ToString()->Split(); 
      MessageBox::Show(x1->Value->ToString()); 
     } 
    } 
    catch (Exception ^ex) 
    { 
    } 
} 

请有人能告诉我如何比较mystrings1和mystrings2之间的值与“启用”,以查看它是否找到了匹配,然后显示与mystrings1值的消息框?

任何意见将不胜感激。

回答

1

这个代码可以帮助你

// set str1 to a constant string for testing 
String^ str1 = "<p id='mystrings1'>user data 1</p><p id=\"images\"> <a href=\"images.php?id=1\">Images</a></td> | <a href=\"http://myhotlink.com\">Link</a> </td> | <a href=\"delete.php?id=1\">Delete</a> </td> | <span id=\"mystrings2\">Enabled</td>"; 
// the pattern is the key part to figure out 
String ^pattern1 = "<p\\sid='mystrings1'>(?<mystrings1value>[^<>]+)</p>.*<span\\sid=\\\"mystrings2\\\">Enabled"; 
Regex^ r = gcnew Regex (pattern1, RegexOptions::IgnoreCase); 

Match ^m1 = r->Match(str1); 
if (m1->Success) 
{ 
    MessageBox::Show (m1->Groups["mystrings1value"]->Value); 
}