mboost-dp1
RegEx
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Jeg her følgende regex:
(https?://)?(www\.)?([a-zA-Z0-9_%\-+!\(\)]*)\b\.[a-z]{2,4}(\.[a-z]{2})?
Den skulle fange en base URL dog inkl. www og/eller http/s og fungerer fint..
Men når jeg smider den ind i preg_match() i PHP, så virker den ikke. Måske er problemet noget med at skulle escape backslash, eller andet? Jeg kan uanset hvad ikke få den til at virke.
Nogen, der lige har styr på det?
(https?://)?(www\.)?([a-zA-Z0-9_%\-+!\(\)]*)\b\.[a-z]{2,4}(\.[a-z]{2})?
Den skulle fange en base URL dog inkl. www og/eller http/s og fungerer fint..
Men når jeg smider den ind i preg_match() i PHP, så virker den ikke. Måske er problemet noget med at skulle escape backslash, eller andet? Jeg kan uanset hvad ikke få den til at virke.
Nogen, der lige har styr på det?
Prøv:
Altså med single quotes om pattern. Så burde det ikke være nødvendigt at escape backslash.
preg_match('/(https?://)?(www\.)?([a-zA-Z0-9_%\-+!\(\)]*)
\b\.[a-z]{2,4}(\.[a-z]{2})?/', $subject)
Altså med single quotes om pattern. Så burde det ikke være nødvendigt at escape backslash.
#2 så må der være noget andet galt... Den fanger ikke webadressen (jeg smider en $matches på som parameter og echoer den med $matches[0]... Den er helt tom med input www.multiform.dk
AltsÅ:
Den virker i regExr
AltsÅ:
preg_match('/(https?://)?(www\.)?([a-zA-Z0-9_%\-+!\(\)]*)\b\.[a-z]{2,4}(\.[a-z]{2})?/', 'www.multiform.dk',$matches);
echo $matches[0];
Den virker i regExr
Jeg kan få øje på flere problemer med det udtryk:rackbox (1) skrev:J(https?://)?(www\.)?([a-zA-Z0-9_%\-+!\(\)]*)\b\.[a-z]{2,4}(\.[a-z]{2})?
- Der kan være mange labels i et hostnavn. Du matcher ingen hostnavne med mere end fire labels, og kun hvis de har en meget specifik form.
- Du tillader karakterer i labels som reelt ikke er tilladt i hostnavne.
- Det er lidt uklart om dit \b virker efter hensigten.
- Top level domæner kan være meget længere end fire tegn.
Hvis man vil bruge en heuristik til at matche hostnavne er det nok bedst at bruge en fast liste af alle de gyldige top level domæner. Jeg tror det er sådan Gmail gør, og det virker nogenlunde fornuftigt.
Jeg har lige prøvet det selv, og grunden til at du får et tomt array er ikke fordi den ikke matcher, men fordi den kommer med en fejl:
Prøv at escape de to "/":
preg_match(): Unknown modifier '/'
Prøv at escape de to "/":
preg_match('/(https?:\/\/)?(www\.)?([a-zA-Z0-9_%\-+!\(\)]*)\b\.[a-z]{2,4}(\.[a-z]{2})?/', 'www.multiform.dk',$matches);
echo $matches[0];
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.