Regulärer Ausdruck für Parameter in URL

Mayday171

Erfahrenes Mitglied
Hallo,

Ich muss mit regulären Ausdrücken arbeiten und habe damit so meine Probleme.
Habe schon einige Tools ausprobiert, aber ich glaube ich bin einfach zu blöd dafür.

Ich suche einen regex für folgende Fälle:

?id=100&L=1

?id=100

?L=1

?id=100&L=

?id=&L=0

?id=&L=


Ich möchte jeweils die Zahl hinter "id=" (von 1 bis unendlich) und die Zahl hinter "L=" (1 - 9)

Habe da schon was zusammengeflickt:

^?id=([0-9]*).*&L=([0-9]+)*

Funktioniert auch schon fast. Jedoch nur für den ersten Fall, also wenn id und L da ist.

Hoffe ihr könnt mir helfen...
Bin am Verzweifeln...

Danke
 
Eigentlich müsstest du den Query String zerlegen, da die Reihenfolge der beiden Argumente auch umgekehrt sein kann:
PHP:
$bool = false;
if( $array = explode('&', $string) ) {
	foreach( $array as $item ) {
		list($name, $value) = explode('=', $item);
		switch( $name ) {
			case 'id':
				$bool = $bool || preg_match('/^(?:[1-9]\d*)?$/', $value);
				break;
			case 'L':
				$bool = $bool || preg_match('/^[1-9]?$/', $value);
				break;
		}
	}
}
var_dump($bool);
Wo willst du das eigentlich einsetzen?
 
Hi,

bei mir funktioniert der reguläre Ausdruck.
Code:
  $strTest = "?id=100&L=1";
  $strPattern = "|^\?id=([\d]{0,})&L=([\d]{0,})|";
  preg_match_all($strPattern, $strTest, $arrTreffer);
  echo("<p>id = " . $arrTreffer[1][0]. ", L = " . $arrTreffer[2][0] . "</p>");
Ciao
Quaese
 
Ich habs mal im RegExCoach getested - sollte laufen:

Tool: http://weitz.de/regex-coach/

Targetstring:
Code:
?id=100&L=1
?id=100
?L=1
?id=100&L=
?id=&L=0
?id=&L=

Regex:
Code:
[\?|&]([id|L]*=[0-9]*)
Split:
Code:
|id=100||L=1|
|id=100|
|L=1|
|id=100||L=|
|id=||L=0|
|id=||L=|

oder

Regex:
Code:
[\?|&][id|L]*=([0-9]*)
Split:
Code:
|100||1|
|100|
|1|
|100|||
|||0|
||||

Für was brauchst du das? Eigentlich gibts in jeder vernünftigen Sprache einen besseren Weg an die GET Parameter zu kommen...
 
Vorschlag:
Code:
[?&]((id|L)=([^&]*))
Voraussetzung ist, dass der Query-String bereits validiert ist.
 
Zuletzt bearbeitet von einem Moderator:
Zurück