Newsflash
Downloads
In der Download Section findet ihr Programme und andere Dinge zum downloaden.
 
Home arrow Programmierung arrow Regex arrow URL "auseinanderpfriemeln" via Regex
URL "auseinanderpfriemeln" via Regex PDF Drucken E-Mail
Geschrieben von Mitja Schmakeit   
Friday, 11. April 2008
Also.. ich hatte vor, eine URL in folgende Teile zu zerlegen:
  1. Protokoll (http, ftp, irc, ...)
  2. Host (www.mitja-schmakeit.de)
  3. Pfad (/pfad/bla)
  4. Dateiname (index.php)
  5. Rest (?foo=1&bar=2)
Mit hilfe dieses Regex (mein erster etwas längerer Regex der Sinn macht..), geht das Auswerten einer URL extrem flott: Unter Perl schreibt dieser Ausdruck sich so:
m/([a-zA-Z]{3,}):\/\/([^\/]+)(?:.(=?[^\?]*\/))*([^\?]*)(?:\?(.*))?/
und unter PHP (preg_match, also auch perl, aber mit doppelten backslashes) so:
"/([a-zA-Z]{3,}):\\/\\/([^\\/]+)(?:.(=?[^\\?]*\\/))*([^\\?]*)(?:\\?(.*))?/"
Ein kleines PHP-Script zeigt die Anwendung:
<?php $url = "http://www.mitja-schmakeit.de/j/content/section/5/28/index.php?tp=1"; $matches = array(); preg_match("/([a-zA-Z]{3,}):\\/\\/([^\\/]+)(?:.(=?[^\\?]*\\/))*([^\\?]*)(?:\\?(.*))?/", $url, $matches); for ($i = 0; $i <= 9; $i++) echo "$i: ".$matches[$i]."\n"; ?>
0: http://www.mitja-schmakeit.de/j/content/section/5/28/index.php?tp=1 1: http 2: www.mitja-schmakeit.de 3: j/content/section/5/28/ 4: index.php 5: tp=1
Blöderweise kann der Regex natürlich nicht erkennen, ob das, was ganz hinten steht nun ein Dateiname ist oder ob der Teil noch zum Pfad gehört, wenn kein Slash dahinter ist.. Also bei http://mitja-schmakeit.de/projects OHNE ein / am Ende, denkt dieser Regex, dass "projects" der Dateiname wäre.. was auch durchaus manchmal der Fall ist. Hinter Pfaden sollte also auf jeden fall immer ein / stehen.. Viel Spaß damit.. verbesserungsvorschläge an mich..
 
Invalid XHTML (Valid XHTML destroyed by some components), Valid CSS - Design by ah-68 - Copyright © 2007 - 2012 by Mitja Schmakeit - Hosted by taruner.de