Gå til innhold

Hjelp med regex


Gjest Slettet+6132

Anbefalte innlegg

Gjest Slettet+6132

Sitter og vimser litt med regex, øynene mine løper snart avgårde av alle tutorials osv :D

 

Det jeg trenger er å kunne matche en url i denne formen:

- Skal starte med http://

- Skal følge med enten www, uk, eller us

- Et punktum må man ha

- Så skal det komme imdb.com/

- Etter det kan det komme hva som helst av alfanumeriske tegn

 

Altså, www.vg.no skal ikke matche. http://www.imdb.com/ skal heller ikke matche, bare med feks http://www.imdb.com/title/tt0107290/.

 

Det jeg har kommet frem til nå er:

 

#(http://){1}(www|uk|us){1}\.imdb\.com/\w+#i

Etter det jeg har forstått skal denne matche "http://" en gang, så "www" eller "uk" eller "us" en gang, deretter .imdb.com/ og så hva som helst.

 

Høres dette fornuftig ut, eller roter jeg noe helt grusomt? Vær vennlig og rett meg om jeg har gjort noe feil ;)

 

Forresten, hvilken funksjon må jeg bruke for å få enten true eller false på dette?

Om jeg har $string = "www.vg.no"; skal denne returnere false, mens $string = "http://www.imdb.com/title/tt0107290/"; skal returnere true.

 

På forhånd takk :)

 

EDIT: Etter "\.com/\w+" i regexen må jeg vel ha noe? Slasher er jo ikke alfanumeriske...

Endret av Slettet+6132
Lenke til kommentar
Videoannonse
Annonse

MÅTTE www/us/uk være med eller kunne den være uten? Kom uansett frem til denne (hvis du fjerner ? etter www|uk-delen blir www/uk/us obligatorisk):

------- SELVE REGEX'EN ----------

\b(http://){1}((www\.|us\.|uk\.){1})?imdb\.com\/([a-z0-9/]){2,30}

-------------------------------------


----------------- I PHP ------------

if (eregi('\\b(http://){1}((www\\.|us\\.|uk\\.){1})?imdb\\.com\\/([a-z0-9/]){2,30}', $url)) {
// MATCH
} else {
// IKKE MATCH
}

-------------------------------------

Endret av Loomy
Lenke til kommentar
Gjest Slettet+6132
MÅTTE www/us/uk være med eller kunne den være uten? Kom uansett frem til denne (hvis du fjerner ? etter www|uk-delen blir www/uk/us obligatorisk):

------- SELVE REGEX'EN ----------

\b(http://){1}((www\.|us\.|uk\.){1})?imdb\.com\/([a-z0-9/]){2,30}

-------------------------------------


----------------- I PHP ------------

if (eregi('\\b(http://){1}((www\\.|us\\.|uk\\.){1})?imdb\\.com\\/([a-z0-9/]){2,30}', $url)) {
// MATCH
} else {
// IKKE MATCH
}

-------------------------------------

5504159[/snapback]

 

Takk :love:

 

www|uk|us skulle være obligatorisk ja, så da fjerner jeg "?".

Jeg var altså ikke sååå langt på jordet selv da :)

 

EDIT: Sign. linje 2

Endret av Slettet+6132
Lenke til kommentar
Gjest Slettet+6132

Hmm, får ikke dette til å fungere jeg.

 

Nå ligger dette i loopen min;

      if($row['imdb']) {
       $imdb = htmlspecialchars($row['imdb']);
       if (eregi('\\b(http://){1}((www\\.|us\\.|uk\\.){1})imdb\\.com\\/([a-z0-9/]){2,30}', $row['imdb'])) {
         echo "<a href=\"$imdb\" title=\"IMDb\" target=\"_blank\"><img src=\"static/img/imdb.gif\" alt=\"IMDb\" /></a>";
       } else {
         echo "<a href=\"$imdb\" title=\"IMDb\" target=\"_blank\"><span style=\"font-size: 7pt; color: #ee3300;\">NOT IMDB</span></a>";
       }
       
     } else {
       echo "--";
     }

 

Har prøvd både med og uten "?" etter der du sa, men den returnerer fortsatt false. Har prøvd med bare tulleurler som "klfjgjgf" og skikklige som "http://www.imdb.com/title/tt0107290/". Ingenting nytter :hrm:

Lenke til kommentar
Gjest Slettet+6132
Prøv å bytt ut eregi'en med

preg_match('\b(http://){1}((www\.|us\.|uk\.){1})?imdb\.com\/([a-z0-9/]){2,30}/i', $row['imdb'])

 

preg_match() skal visstnok være litt kjappere også..

5507809[/snapback]

 

Warning: preg_match(): Delimiter must not be alphanumeric or backslash in c:\*\*\*\*\inc\dvd.inc.php on line 47

NOT IMDB

 

*Klø meg i "skjegget"*

 

EDIT: preg_match('$(http://){1}((www\\.|us\\.|uk\\.){1})imdb\\.com\\/([a-z0-9/]){2,30}$', $row['imdb']) fungerer, men vil jo ha den case insensitive. Hvordan fikse? :)

 

EDIT: preg_match('$(http://){1}((www\\.|us\\.|uk\\.){1})imdb\\.com\\/([a-z0-9/]){2,30}$i', $row['imdb']) var løsningen, takk for all hjelp :)

Endret av Slettet+6132
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...