webForumDet fria alternativet

Regexp och länk?

.NET

8 svar · 632 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Jag vill söka igenom ett textdokument som hittar alla länkar som ser ut så här:

<a href="/links/id345435/">Länknamn</a> (1956)
eller så här:
<a href="/links/id345122/">Länknamn</a> (1987/A)
eller så här:
<a href="/links/id342122/">Länknamn</a> (1987/AA)
eller så här:
<a href="/links/id312455/">Länknamn</a> (1987/AAA)

Dim rx As New Regex("<a href=""\/links\/id(\d+)\/"">(.*?)<\/a> \(([0-9A\/])\)")

  matches = rx.Matches(strHtml)

  For Each match As Match In matches
      groups = match.Groups
          sb.AppendFormat("{0} - {1} ({2})<br />", groups.Item(1).Value, groups.Item(2).Value, groups.Item(3).Value)
  Next

Men om det kommer en länk som tex ser ut så här:
<a href="/links/id312455/">Länknamn</a> (????)
...Så blir det fel.

Medlem sedan jan. 200817 inlägg
#2

Hmm
Du har

\(([0-9A\/])\)

på slutet.
Fattas det inte en stjärna, eller kommer den
inte bara att matcha ett tecken annars?

Men det är väl inte det som är felet. Hur menar
du att det inte fungerar? Menar du att (????)
matchar fast det inte borde göra det?

mvh Simon

Medlem sedan okt. 20041 556 inlägg
#3

Ja, precis, det är ju bara 0-9 och eller slash / och eller A:n som skall matcha det innanför parenteserna.

Medlem sedan dec. 20025 483 inlägg
#4

Så ditt sista exempel skall inte tas med?

Dim rx As New Regex("<a href=""/links/id(\d+)/"">(.*?)</a> \(([0-9]+(?:/A+)?)\)")
Medlem sedan okt. 20041 556 inlägg
#5

Jo det är kanske så att frågetecken också skall få vara med...

Medlem sedan dec. 20025 483 inlägg
#6
Dim rx As New Regex("<a href=""/links/id(\d+)/"">(.*?)</a> \(((?:[0-9]+(?:/A+)?)|\?+)\)")
Medlem sedan okt. 20041 556 inlägg
#7

Oki, vad juste!
Men ponera att det står något annat i parentesen (arne)
vad händer med mönstret då, kommer den länken finnas med bland "matches"?

Medlem sedan dec. 20025 483 inlägg
#8

Nej, då kommer den länken inte med. Vill du ha med länkar oavsett vad som står inom parenteserna kan du skriva

Dim rx As New Regex("<a href=""/links/id(\d+)/"">(.*?)</a> \([^)]+\)")
Medlem sedan okt. 20041 556 inlägg
#9

Tack!

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)