pcre-Ausdruck: nicht alle Matches gelistet

methodus

Erfahrenes Mitglied
Hallo,

ich bin dem Verzweifeln nahe, da mich dieser reguläre ausdruck irgendwie nicht mag:

PHP:
$pattern = "#\[(([+-]?[\d]+),?)+\]#iS";
$test = "[1,3,5,9,-12]";

if ( preg_match_all($pattern, $test, $matches) ){
    print_r($matches);
}
else {
	echo "Schade";
}

Der gibt mir folgendes ergebnis:

Code:
Array
(
    [0] => Array
        (
            [0] => [1,3,5,9,-12]
        )

    [1] => Array
        (
            [0] => -12
        )

    [2] => Array
        (
            [0] => -12
        )

)

Wie die Vermutung nahe liegt, ist mir diese -12 zu wenig, ich will alle Zahlen!

Paradoxerweise funktioniert der Spaß, wenn ich \[ bzw. \] im Pattern weglasse, kann ich aber nicht so ohne weiteres, weil der Pattern nur Teil eines komplexeren Patterns ist...

Also: HILFE
 
Mit einem Ausdruck wird das nicht gehen.... du müsstest zuerst den Ausdruck mit den Klammern prüfen, das Ergebnis(ohne Klammern) dann nochmals verarbeiten.
 
Probier mal Folgendes:
PHP:
<?php

	$pattern = '/(?:([\d+-]+),?)/';
	$test = '[1,3,5,9,-12]';

	if( preg_match_all($pattern, $test, $matches) ){
		$matches = $matches[1];
		echo '<pre>';
		print_r($matches);
		echo '</pre>';
	} else {
		echo 'Schade';
	}

?>
 
Gumbo hat gesagt.:
Probier mal Folgendes:
PHP:
<?php

	$pattern = '/(?:([\d+-]+),?)/';

?>

Dieser Ausdruck ist falsch bzw, lässt falsche Möglichkeiten zu, denn es gäbe dann auch Werte wie "3-4+4" oder "----". Des Weiteren fehlen bei dem Ausdruck ja wieder die Klammern, und das habe ich ja oben bereits beschrieben, dass dann mein Ausdruck klappt, nur mit Klammern halt nicht.

Wie Sven bereits meinte, muss ich alle Ergebnisse mit Klammer filtern und dann nochmal ohne Klammer verarbeiten, was ich auch jetzt getan habe.

und ich dachte, PCRE packt das :( *sniff*
 
Du hast weder erwähnt, dass die Werte aus mehreren Zahlen und mathematischen Operatoren bestehen können oder dass die eckigen Klammern ebenfalls mit dem Suchausdruck überinestimmen müssen. Aus deinem (wenig informativen) Eingangsbeitrag habe ich lediglich geschlossen, dass dir die numerischen Werte interessieren.
Das nächste Mal also bitte eine etwas ausführlichere Erklärung, dann kommt es auch nicht so schnell zu Missverständnissen.
 
Zurück