webForumDet fria alternativet

Regular Exp.

16 svar · 374 visningar · startad av icaaq

icaaqMedlem sedan okt. 20004 910 inlägg
#1

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

ViktorMedlem sedan aug. 20021 710 inlägg
#2

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

icaaqMedlem sedan okt. 20004 910 inlägg
#3

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?

ViktorMedlem sedan aug. 20021 710 inlägg
#4

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

icaaqMedlem sedan okt. 20004 910 inlägg
#5

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

ViktorMedlem sedan aug. 20021 710 inlägg
#6

får återkomma när jag är hemma, mycket att göra nu i skolan :)

/Viktor

icaaqMedlem sedan okt. 20004 910 inlägg
#7

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

icaaqMedlem sedan okt. 20004 910 inlägg
#8

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

PMedlem sedan jan. 20012 107 inlägg
#9

Håller ni på med sånt här i skolan?

ViktorMedlem sedan aug. 20021 710 inlägg
#10

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

icaaqMedlem sedan okt. 20004 910 inlägg
#11

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.....

renholmMedlem sedan apr. 20012 048 inlägg
#12

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=(.*?)\"\>");
ViktorMedlem sedan aug. 20021 710 inlägg
#13

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

PaceMedlem sedan juni 20015 947 inlägg
#14

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?

icaaqMedlem sedan okt. 20004 910 inlägg
#15

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

icaaqMedlem sedan okt. 20004 910 inlägg
#16

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

icaaqMedlem sedan okt. 20004 910 inlägg
#17

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

Genererad på 372 ms · cache AV · v20260730165559-full.f96bc7eb