---
title: "reg exp vilket jag inte förstår?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/183204-reg-exp-vilket-jag-inte-förstår"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "evilaid"
published: "2010-04-17T10:31:00.000Z"
updated: "2010-04-21T13:19:34.000Z"
replies: 16
views: 1564
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/183204-reg-exp-vilket-jag-inte-förstår"
---

# reg exp vilket jag inte förstår?

## #1 — evilaid, 2010-04-17T10:31Z

ok, jag måste vara dum för jag kan inte få till reg exp..

om jag har följande:
\<tr valign="top"\>
 \<th\>Originaltitel:\</th\>
 \<td\>Just Kids\</td\>
 \</tr\>

och nu vill plocka ut namnet (just kids) hur ska det går till?

hittade en svensk guide över vad alla tecken har för funktion men förstår ändå inte hur jag ska matcha dom för att få ut namnet?

Permalänk: https://www.webforum.nu/p/183204

## #2 — voigtann1, 2010-04-17T17:38Z

\<td\>(\[^\<\]+)\</td\>

om det är det ända html som skickas ut som du beskriver.

Permalänk: https://www.webforum.nu/p/2233271

## #3 — evilaid, 2010-04-19T18:19Z

O tack..

Nja det är igentligen mer text som skickas, typ:

```
 <tr valign="top">
 <th>&Ouml;vers&auml;ttare</th>
 <td>Ulla Danielsson</td>
 </tr>

 <tr valign="top">
 <th>Originaltitel:</th>
 <td>Just Kids</td>
 </tr>

 <tr valign="top">
 <th>F&ouml;rlag</th>
 <td><a href="/pub45095.html">Brombergs</a></td>
 </tr>
```

Jag frågade lite lugnt först, klarade nog inte mer än så för jag blir inte riktigt klok på ditt exempel... Jag provade det i ett litet program från gskinner.com men då maskeras ju hela raden. alltså  \<td\>Just Kids\</td\>

Kör jag ditt yttryck på ovan html så får jag med två rader men inte den tredje  (som är en länk) antar attd et har med hakarna att göra?

Men uttrycket då: \<td\>(\[^\<\]+)\</td\>
"\<td\>" gör att jag får med första taggen
() är en grupp av innehållet innanför..
\[\] är de också för att gruppera?
\[^\<\]+ säger det att det ska börja \< ?
(\[^\<\]+) känns som dubbla grupperingar? 

Tror inte riktigt jag fattat hur man ska tänka med reg exp?

Mvh

Permalänk: https://www.webforum.nu/p/2233351

## #4 — voigtann1, 2010-04-19T18:32Z

hämtar allt som är runt \<td\>...\</td\> som INTE är ett \<
() =\> Grupp du kan hämta ut ($1)
\[\] =\> träffar vilket tecken som helst som är inne i \[\]
\[^\] =\> Träffar vilket tecken som helst men INTE som är inne i \[\]

i ditt exempel så får du två träffar:

```
 <td>Ulla Danielsson</td>
..
 <td>Just Kids</td>
```

men inte 

```
 <td><a href="/pub45095.html">Brombergs</a></td>
```

eftersom den inte matchar då uttrycket säger att vilket tecken som helst som inte är \> och direkt efter det \</td\>\> vilket inte stämmer på den raden.

Permalänk: https://www.webforum.nu/p/2233353

## #5 — dAEk, 2010-04-19T19:53Z

Är det screen scraping du håller på med?   :) I så fall är det mycket enklare att använda XPath. Jag håller själv på med ett projekt som läser ut info från webbsidor och använder inte regex utan XPath. 

Man måste tänka på att strukturen på Html-sidorna kan ändras när som helst och då vill man nog slippa sitta och harva med kryptiska regexps. XPath-uttryck är mycket lättare att läsa och även om de kan vara bökiga att få till ibland är det ingenting jämfört med hur ens regex skulle se ut.

För att kunna ställa frågor mot en Html-sida behöver man tillgång till DOM-trädet men hur det ser ut i gammal, hemsk ASP vet jag inte. Det borde gå med en komponent (COM+) men jag känner inte till någon; inte så konstigt med tanke på att jag knappt rört ASP de senaste åren. Använder man Java eller .NET finns det betydligt fler alternativ, t.ex. TagSoup, JTidy resp. HtmlAgilityPack. I .NET finns det även en sorts portning av Sizzle, en viktig del av jQuery, som gör att man kan söka i dokumentet med CSS-selektorer m.m. Tråkigt nog fick jag det inte att rulla så jag fick nöja mig med XPath istället.

Jämför regex:et med ett slarvigt, otestat och troligen icke-fungerande XPath:

```
document = GetWebPage(sökväg);
document.SelectSingleNode("//tr[th/text()='Originaltitel:']/td/text()");
```

Som sagt, uttrrcket är inte testat och eftersom jag ingte är nån guru på något vis så funkar den nog inte rakt uppochned. Men visst ser det enklare ut!

Regexp är sjukt användbart i vissa lägen men inte här.

Permalänk: https://www.webforum.nu/p/2233357

## #6 — evilaid, 2010-04-21T05:36Z

> hämtar allt som är runt \<td\>...\</td\> som INTE är ett \<

Men när jag provar i gskinner's program så markeras ju även td taggarna?

Jag måste vara dum på riktigt för det går inte in i mitt huvud hur jag ska tänka.
Alltså om man ska beskriva \<td\>(\[^\<\]+)\</td\> i en enda lång mening så:
välja allt som börjar med \<td\> och sen alla tecken förutom "\<"  och tecknen får förekomma 1 eller oändlig antal gånger??

Säg att jag ska plocka ut namnet på översättaren bara då, alltså Ulla Danielsson:

```
 <tr valign="top">
 <th>&Ouml;vers&auml;ttare</th>
 <td>Ulla Danielsson</td>
 </tr>
```

Kan man få med det som villkor att denna raden \<td\>Ulla Danielsson\</td\> där det föregås av \<th\>&Ouml;vers&auml;ttare\</th\>?

dAeK:
Tyvärr är det gammal hemsk asp jag använder :bire Har inte hunnit provat sp mcyket med asp.net. Du har helt rätt, det är screen scraping jag försöker mig på..
Tror ju inte sidan kommer förändras så mycket i detta fallet och skulle det vara så får man väll korrigera för det..
Men intressant förslag.. Kan va något att tänka på i framtiden..

Permalänk: https://www.webforum.nu/p/2233449

## #7 — voigtann1, 2010-04-21T06:09Z

Ja, självklart markeras hela uttrycket, men du har grupperat vad du vill hämta ut med ().
Eftersom jag måste vara extremt trög på att förklara saker så ge jag dig vad regexp säger:

```
[^>]+
 Match any character that is NOT a &#8220;>&#8221; «[^>]+»
    Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
```

Och för din andra fråga: Ja om Det är en konstant som heter &Ouml;vers&auml;attare följt av en td.

Permalänk: https://www.webforum.nu/p/2233453

## #8 — evilaid, 2010-04-21T07:47Z

Tror trögheten ligger hos mig, har tittat på det lite tidigare men nästan gett upp.. Men jag ska ge det ett nytt försök:)
Hur fick du fram texten "vad regexp säger" något program som beskriver det så eller egenkomponerat?

andra frågan där: Om du vill? hur skulle uttrycket se ut om jag vill få fram namnet på översättaren. Det är en konstant.

Tänkte att jag kunde köra två regexp. En för att ta fram översättaren (&Ouml;vers&auml;attare) och en för att ta fram titeln...

Permalänk: https://www.webforum.nu/p/2233460

## #9 — voigtann1, 2010-04-21T07:52Z

<http://www.regular-expressions.info/> \-\> bra sajt för Regexp
<http://www.regexbuddy.com/> \-\> Applikation jag tycker är värd varje krona det kostade ;) 

Annars kan jag rekommendera webeye.nu (dock är den nere) men har fått lov att köra lite referenser från Vide (på wF): <http://voigt.se/sandbox/regexp/#referense> 

om det är:

```
<th>&Ouml;vers&auml;ttare</th><td>([^<]+)</td>
```

eller:

```
<th>&Ouml;vers&auml;ttare</th>\n<td>([^<]+)</td>
```

eller

```
<th>&Ouml;vers&auml;ttare</th>[\n\s]+<td>([^<]+)</td>
```

är svårt att säga då jag inte vet exakta text strukturen du få tillbaka av datan.

Permalänk: https://www.webforum.nu/p/2233461

## #10 — evilaid, 2010-04-21T09:58Z

Sista exmplet var klockrent!! Gällde väll att få radbyte och matning rätt där:)

Exemplet fungerar kanon i asp men när jag provar med jacascript så vill det sig inte..
får bara felet 
Fel: invalid regular expression flag \<
Källkodsfil: <http://127.0.0.1/studlit/incl/jscripts.js>
Rad: 37

```
  
strHTML = "<th>jhhjljlj</th> <td>testar</td> för att se om regular expressions"       
var strHTML = xmlhttp.responseText;
var exp = new RegExp("<th>F&ouml;rfattare</th>[\n\s]+<td>([^<]+)</td>");
Rad 37: var expr = new RegExp(strHTML,"<th>F&ouml;rfattare</th>[\n\s]+<td>([^<]+)</td>");
```

blir inte klok på det??

Permalänk: https://www.webforum.nu/p/2233480

## #11 — evilaid, 2010-04-21T12:07Z

med risk för att vara otroligt jobbig:
Men:

det svar jag får från uttrycket. Skriver jag ut det på en sida så får jag ju bara titeln. Kanon! Men om jag fyller i ett formulär med det  jag får tillbaka så är ju td och th taggarna med.. Hur kommer det sig? 
Nu gjorde jag så att jag körde några "replace" för att få bort dom men var bara nyfiken på varför jag får med dom då?

Permalänk: https://www.webforum.nu/p/2233490

## #12 — voigtann1, 2010-04-21T12:22Z

Ge mer kod! hämtar du ut hela matchningen eller tar du ut $1 bara?

Permalänk: https://www.webforum.nu/p/2233495

## #13 — evilaid, 2010-04-21T12:28Z

Hmm, $1?

Så här ser koden ut:

```
Set objRegExp = New regexp
objRegExp.Global = false
objRegExp.IgnoreCase = true
objRegExp.Pattern = "<th>Originaltitel:</th>[\n\s]+<td>([^<]+)</td>"
Set hittade = objRegExp.Execute(strHTML)
titel = Replace(hittade.item(0),"Originaltitel:","")
titel = Replace(titel,"<th></th> <td>","")
Set objRegExp = Nothing
```

nu är mina "smidiga" replace satser med ocksp :)

gjorde även ett försök att få ut författarnamnet om det är en a tagg innan som i detta:

```
 <tr valign="top">
 <th>F&ouml;rfattare</th>
 <td><h2 class="bookauthors"><a href="/boktips/author.html?thisauthor=Smith%2C%20Patti"><b>Patti Smith</b></a></h2></td>
```

Men där blir det stopp igen.
jag skulle ju vilja ha så här och en negation (eller vad det heter) som säger att jag vill ha det som inte står inom \< \> ? eller är det feltänk?

Permalänk: https://www.webforum.nu/p/2233497

## #14 — voigtann1, 2010-04-21T12:36Z

```
...	objRegExp.Pattern = "<th>Originaltitel:</th>[\n\s]+<td>([^<]+)</td>"
	Set MyMatch = objRegExp.Execute(strHTML)

	If MyMatch.count > 0 Then
		titel =  MyMatch(0).SubMatches(0)
	End If
```

Sen kan du inte bara köra mitt uttryck rakt upp och ner, du kommer med olika saker gång på gång, regexp uttrycket säger att den bara hämtar text som är runt en \<td\>\</td\> där det inte finns någon html kod.

Och ja, självklart kan du hämta ut allt som finns i \<td\>..\</td\> även html och sen ersätta all html med inget, men frågan är ens om du få göra detta för Bokia.

Permalänk: https://www.webforum.nu/p/2233499

## #15 — evilaid, 2010-04-21T12:55Z

Ok, är väll med på att jag inte kan använda ditt rakt av, men lever och lär av det:)

Gällande bokia så är detta bara för privat bruk så det lär nog inte orsaka någon större belastning för dom, kan väll se det som att jag bara tittar på deras utbud precis som vilket besökare som helst §e

Men som i exemplet  då det finns en a tag innanför td taggarna.. 
Borde jag inte kunna använda samma som tidigare fast med villkoret att jag inte vill ha något som finns inom \<\>. Alltså all text inom td taggarna som inte börjar med \< och slutar med \>?

\<th\>F&ouml;rfattare\</th\>\[\\n\\s\]\<td\>(\[^\<\]+\[^\>\]+)

Permalänk: https://www.webforum.nu/p/2233504

## #16 — voigtann1, 2010-04-21T13:08Z

```
<th>F&ouml;rfattare</th>[\n\s]+<td>.+<b>([^<]+)</b>.+</td>
```

Sen är det ju inte för att det är en belastning för dom jag är orolig över utan det är att du ta innehåll som inte är din egen.

Permalänk: https://www.webforum.nu/p/2233510

## #17 — evilaid, 2010-04-21T13:19Z

Förstår dig... 

Jag sökte på lite olika isbn databaser för se om man kan hitta andra som är öppna. Hitta t.ex libris.. Blir till att börja om på uttrycken :o

Men det sista fungerade kanon.. Nu ska du slippa mer frågor från mig idag :) 

Jättetack för all hjälp..

Btw: laddar ner regexbuddy nu...

Permalänk: https://www.webforum.nu/p/2233511

---

Tråden på webben: https://www.webforum.nu/amne/asp/183204-reg-exp-vilket-jag-inte-förstår
