| URL "auseinanderpfriemeln" via Regex |
|
|
|
| Geschrieben von Mitja Schmakeit | |
| Friday, 11. April 2008 | |
Also.. ich hatte vor, eine URL in folgende Teile zu zerlegen:
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.. |








