Hur ska jag göra för att hitta alla länkar på en sida mha RegExp? Det är till en httpWebRequest som jag har gjort (se tidigare inlägg)
mvh icaaq
16 svar · 374 visningar · startad av icaaq
Hur ska jag göra för att hitta alla länkar på en sida mha RegExp? Det är till en httpWebRequest som jag har gjort (se tidigare inlägg)
mvh icaaq
Såhär :)
Regex r=new Regex("<a[^>]*>");
Match m=r.Match(your_string);
while(m.success)
{
};
Vill du ha mer hjälp med hur du sedan får ut allt med match så får du vänta några timmar tills jag kommer hem så jag kan titta i min kod :)
/Viktor
Så här långt har jag kommit, vet ej om det funkar än:
[red]
private string[] _fetchlinks(string webres)
{
Regex regexp = new Regex("\<a href=\"events2.lasso?-Token.ID=(.*?)\"\>");
Match m = regexp.Match(webres);
while(m.Success == true)
{
foreach(Capture c in m.Captures)
{
string[] links =+ m.Value.ToString();
}
}
return links;
}[/red]
men jag får Unrecognized escape sequence.
Nått du kan hjälpa mig med?
För att göra en excape i regex (inte bara i strängen) så måste du gör två \\, altså
Regex regexp = new Regex("\\<a href=\"events2.lasso?-Token.ID=(.*?)\"\\>");
/Viktor
ok.....har inte använt RegExp nått tidigare....
Nästa......
Hur lägger jag ihop alla träffar i min array?
[red]
private string[] _fetchlinks(string webres)
{
Regex regexp = new Regex("\<a href=\"events2.lasso?-Token.ID=(.*?)\"\>");
Match m = regexp.Match(webres);
while(m.Success == true)
{
foreach(Capture c in m.Captures)
{
[b]string[] links =+ m.Value.ToString();[/b]
}
}
return links;
}[/red]
Den feta funkar ju inte
mvh icaaq
Behövs inte då jag löste det så här
[red]
private ArrayList _fetchlinks(string webres)
{
Regex regexp = new Regex("\\<a href=\"events2.lasso?-Token.ID=(.*?)\"\\>");
Match m = regexp.Match(webres);
ArrayList links = new ArrayList();
while(m.Success == true)
{
links.Add(m.Value.ToString());
}
return links;
}
[/red]
mvh icaaq
Jag var och slängde i mig lite mat, tanken slog mig då varför inte ta hela länken??
hur skulle ett sådant pattern se ut??
[red]
<a href="events2.lasso?-Token.ID=XXXXX" class="meny1">XXX XXX</a>
[/red]
mvh icaaq
Håller ni på med sånt här i skolan?
P skrev:
Håller ni på med sånt här i skolan?
Om jag gjorde det skulla jag ha kunnat svara från skolan :)
Det här är en ren gissning
<a href="[^\\"]*" class="meny1">[^<]*</a>
Det borde bli "<a href="HITTA_VAD_SOM_HELLST_STANNA_VID_"" class="meny1">HITTTA_VAD_SOM_HELLST_STANNA_VID_< </A>"
/Viktor
Attans det vill inte riktigt funka för mig, nu har jag denna kod för att hämta hen en sida:
[red]
private string _fetchurl(string url)
{
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
WebResponse WebRes = WebReq.GetResponse();
Stream st = WebRes.GetResponseStream();
StreamReader sr = new StreamReader(st);
string _fetchedstring = HttpUtility.HtmlEncode(sr.ReadToEnd());
return _fetchedstring;
}
[/red]
Resultatet av denna ska jag sen i denna hämta ut lite olika saker, i detta fallet lite länkar
[red]
private ArrayList _fetchlinks(string webres, string pattern)
{
Regex regexp = new Regex(pattern);
Match m = regexp.Match(webres);
ArrayList links = new ArrayList();
while(m.Success == true)
{
links.Add(m.Value.ToString());
}
return links;
}
[/red]
Som jag anropar så här
[red]
_news = _fetchlinks(_getmainstream, "\\<a href=\"news2.lasso?-Token.ID=(.*?)\" class=\"meny1\"\\>(.*?)<\\/a>");
[/red]
Det är här jag tror att det blir fel för att jag vet att jag får en string av fetchurl.
Problemet ligger alltså att jag inte får några träffar.....
Viktor skrev:
För att göra en excape i regex (inte bara i strängen) så måste du gör två \\, altså
Regex regexp = new Regex("\\<a href=\"events2.lasso?-Token.ID=(.*?)\"\\>");/Viktor
Har även för mig att du kan lägga till ett litet @ för att det ska gå att skriva vanlig text och ignorera \n \ osv.
Blir då så här
Regex regexp = new Regex(@"\<a href=\"events2.lasso?-Token.ID=(.*?)\"\>");
renholm skrev:
Har även för mig att du kan lägga till ett litet @ för att det ska gå att skriva vanlig text och ignorera \n \ osv.
Blir då så här
Regex regexp = new Regex(@"\<a href=\"events2.lasso?-Token.ID=(.*?)\"\>");
:i
Det är altså därför det är ett @ framför alla fil namn i fil access exempel :)
/Viktor
Med den regexpen borde du väl träffa alla tecken, det är väl Viktors variant du bör använda dig av istället?
Nu har jag ett pattern som fungerar men vad som inte fungerar är min webRequest. Den ser ut så här
[red]
private string _fetchstream(string url)
{
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
WebResponse WebRes = WebReq.GetResponse();
Stream st = WebRes.GetResponseStream();
StreamReader sr = new StreamReader(st);
string _fetchedstring = sr.ReadToEnd();
return _fetchedstring;
} [/red]
men om jag ska hämta en sida som har en ISO-8859-1 encoding så funkar inte RegExp:n
Nån som har en lösning på detta delikata problem
mvh icaaq
Jag forsätter, är denna rätt
[red]
Regex r = new Regex(@"<a href=""(\.?)""");
[/red]
Jag vill alltså ta ut alla
<a href="xxx"
mvh icaaq
Fortsätter med en ny regexp ;)
jag har
[red]
Match regex = Regex.Match(Request.Cookies["scrambledegg"].Value.ToString(), @"\.(.*?)8user");[/red]
Hur gör jag för att endast få ut värdet mellan punkten(.) och 8user??
mvh icaaq