Hi,
Ik ben voor een project een 'slimme' parser aan het maken die het invoeren van gegevens in een veld van een blog monkey-proof moet maken. Lang verhaal kort, in het veld bronvermelding moet het niet uitmaken of de auteur een van de volgende dingen typt:
- http://www.google.com
- via http://www.google.com
- via google.com
- ik heb de link gevonden op google.com en http://www.google.com/test/test.html
Kortom, een 'slimme' preg_match met een valide regex volgens mij.
Na wat googlen vond ik het volgende: (stukje van hoe ik het gebruik in een class)
Wat is hier nu het probleem mee?
- hij matcht wel op http://www.google.nl, maar in de result van de match helaas geen 'http://'. Ondanks deze volgens mij optioneel en greedy staat (?)
De regex heb ik gevonden op: http://geekswithblogs.net...ive/2005/12/01/61722.aspx
Iemand een idee om dit werkend te krijgen?
Ik ben voor een project een 'slimme' parser aan het maken die het invoeren van gegevens in een veld van een blog monkey-proof moet maken. Lang verhaal kort, in het veld bronvermelding moet het niet uitmaken of de auteur een van de volgende dingen typt:
- http://www.google.com
- via http://www.google.com
- via google.com
- ik heb de link gevonden op google.com en http://www.google.com/test/test.html
Kortom, een 'slimme' preg_match met een valide regex volgens mij.
Na wat googlen vond ik het volgende: (stukje van hoe ik het gebruik in een class)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?php $this->url_regex = '^'; $this->url_regex .= '(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~/|/)?'; $this->url_regex .= '(?#Username:Password)(?:\w+:\w+@)?'; $this->url_regex .= '(?#Subdomains)(?:(?:[-\w]+\.)+'; $this->url_regex .= '(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))'; $this->url_regex .= '(?#Port)(?::[\d]{1,5})?'; $this->url_regex .= '(?#Directories)(?:(?:(?:/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|/)+|\?|#)?'; $this->url_regex .= '(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*'; $this->url_regex .= '(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?^'; $string = "blabla http://www.google.com" if(preg_match($this->url->regex, $string, $match) { echo $match[0]; // --> www.google.com } ?> |
Wat is hier nu het probleem mee?
- hij matcht wel op http://www.google.nl, maar in de result van de match helaas geen 'http://'. Ondanks deze volgens mij optioneel en greedy staat (?)
De regex heb ik gevonden op: http://geekswithblogs.net...ive/2005/12/01/61722.aspx
Iemand een idee om dit werkend te krijgen?