wake-up-neo.net

PHP preg_match zwischen String

Ich versuche den String hello world zu bekommen.

Das habe ich bis jetzt:

$file = "1232#hello world#";

preg_match("#1232\#(.*)\##", $file, $match)
14
Kevin King

Es wird empfohlen, ein anderes Trennzeichen als # zu verwenden, da Ihre Zeichenfolge # und ein nicht-gieriges (.*?) enthält, um die Zeichen vor # zu erfassen. Übrigens muss # nicht in dem Ausdruck mit Escapezeichen versehen werden, wenn es nicht auch das Trennzeichen ist.

$file = "1232#hello world#";
preg_match('/1232#(.*?)#/', $file, $match);

var_dump($match);
// Prints:
array(2) {
  [0]=>
  string(17) "1232#hello world#"
  [1]=>
  string(11) "hello world"
}

Noch besser ist es, [^#]+ (oder * anstelle von +, falls Zeichen nicht vorhanden sind) zu verwenden, um alle Zeichen bis zum nächsten # zu finden.

preg_match('/1232#([^#]+)#/', $file, $match);
19

Verwenden Sie Lookarounds:

preg_match("/(?<=#).*?(?=#)/", $file, $match)

Demo:

preg_match("/(?<=#).*?(?=#)/", "1232#hello world#", $match);
print_r($match)

Ausgabe:

Array
(
    [0] => hello world
)

Testen Sie es hier.

11
Ωmega

Wenn Sie möchten, dass das Trennzeichen auch in das Array aufgenommen wird, ist dies für preg_split sinnvoller, wenn Sie nicht möchten, dass jedes Arrayelement mit den Trennzeichen beginnt und endet Array-Werte. Dies wäre das, was Sie brauchen würden preg_match('/\#(.*?)#/', $file, $match); print_r($match); das würde array( [0]=> #hello world# ) ausgeben 

0
Jevon McPherson

Es sieht für mich so aus, als müsstest du nur $match[1] bekommen:

php > $file = "1232#hello world#";
php > preg_match("/1232\\#(.*)\\#/", $file, $match);
php > print_r($match);
Array
(
    [0] => 1232#hello world#
    [1] => hello world
)
php > print_r($match[1]);
hello world

Bekommen Sie unterschiedliche Ergebnisse?

0
Sean Redmond
preg_match('/1232#(.*)#$/', $file, $match);
0
Pankaj Khairnar