---
title: "Regexp: hitta mönstret i en text genom keywords"
type: "forum-thread"
url: "https://www.webforum.nu/amne/webbutveckling/183074-regexp-hitta-mönstret-i-en-text-genom-keywords"
topic: "Webbutveckling"
topic_url: "https://www.webforum.nu/amne/webbutveckling"
author: "Carl Hungus"
published: "2010-04-06T13:16:02.000Z"
updated: "2010-04-13T21:45:30.000Z"
replies: 4
views: 950
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/webbutveckling/183074-regexp-hitta-mönstret-i-en-text-genom-keywords"
---

# Regexp: hitta mönstret i en text genom keywords

## #1 — Carl Hungus, 2010-04-06T13:16Z

Hej!

Jag jobbar med sökalgoritmer till en VB/6 program. Programmet söker igenom websidor och returnerar en träff om ett sökord förekommer i texten. T ex om ordet "hamster" anges så kommer programmet ange träffar så fort ordet hamster förekommer, oavsett sammanhanget.

Nu är jag intresserad av att "sålla ut" websidor som specifikt handlar om hamstrar. Min ide är att hitta ett regexp-uttryck som ger träff om ordet hamster förekommer 3 gånger eller fler. Har försökt med: 

hamster\\w{3} 
(hamster)\\w{3,}

Fungerar dock inte. Tror jag är inne på fel spår. All hjälp mottages tacksamt!
Carl

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

## #2 — nitro2k01, 2010-04-06T13:34Z

Ett sätt kan vara att kolla på resultatet du får tillbaka (kanske en array?) och kolla hur många träffar du får. Annars kanske följande kan funka:

```
(hamster.*){3}
```

Felet du gör är att {3,} syftar till \\w och inte hela uttrycket. Alltså, ordet hamster förljt av 3 eller fler "ord-tecken". (vilket är vad \\w står för.)
**hamsterxyz** och **hamsterxyzabc** skulle båda matcha men inte **hamster xyz** eftersom ordet hamster följs av mellanslag som inte är ett "ord-tecken". 

Mitt förslag sätter allt inom parenteser vilket gör att det som står inom parentesen eftersöks 3 gånger. **.\*** betyder "matcha 0 eller flera valfria tecken". **hamster.\*** matchar således **hamster** och **hamsterxyz** och **hamster xyz**.
Notera att du bara behöver söka efter tre träffar. Om det är allt du vill veta så behöver du ju inte söka efter en fjärde träff. (Spara lite CPU) Däremot om du vill få ut alla träffar eller veta att det inte finns *mer* än tre träffar behöver du ett mer avanncerat uttryck.

Jag skulle även vilja föreslå:

```
(hamst(er|rar).*){3}
```

...som söker efter tre förekomster av antingen hamster eller hamstrar. T ex **hamsterhamsterhallonsylthamstrar** eller **hamster hamsterpaj något annat hamstrar**. **(er\|rar)** söker alltså efter en förekomst av antingen **er** eller **rar**.

Välkommen till webForum förresten. :)

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

## #3 — SPiN, 2010-04-06T13:41Z

Frågan är om det ens går utan att upprepa mönstret - men varför göra det krångligt?

```
Dim myRegExp As RegExp
Dim myMatches As MatchCollection
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "regex"
Set myMatches = myRegExp.Execute(subjectString)

If myMatches.Count > 2
    ' 3 or more matches
Else
    ' Nope
End If
```

Edit - Oj, vad seg jag var.

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

## #4 — Carl Hungus, 2010-04-07T14:08Z

Tack! Tänk att det kunde vara så lätt!

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

## #5 — dAEk, 2010-04-13T21:45Z

**@nitro2k01:** Kanonbra svar och det förtjänar en  :bire!  (y)

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

---

Tråden på webben: https://www.webforum.nu/amne/webbutveckling/183074-regexp-hitta-mönstret-i-en-text-genom-keywords
