web-dev-qa-db-fra.com

PHP preg_match entrer dans la chaîne

J'essaie d'obtenir la chaîne hello world.

C'est ce que j'ai jusqu'ici:

$file = "1232#hello world#";

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

Il est recommandé d'utiliser un délimiteur autre que # car votre chaîne contient # et un (.*?) non-glouton pour capturer les caractères précédant #. Incidemment, # n'a pas besoin d'être échappé dans l'expression si ce n'est pas aussi le délimiteur.

$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"
}

Encore mieux, utilisez [^#]+ (ou * au lieu de + si les caractères peuvent ne pas être présents) pour faire correspondre tous les caractères jusqu'au prochain #.

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

Utilisez des lookarounds:

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

Démo:

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

Sortie:

Array
(
    [0] => hello world
)

Testez-le ici.

11
Ωmega

Et si vous voulez que le délimiteur soit également inclus dans le tableau, ce serait plus utile pour preg_split où vous ne voudriez pas que chaque élément du tableau commence et se termine par les délimiteurs, l’exemple que je suis sur le point de montrer inclut les valeurs de tableau. ce serait ce dont vous auriez besoin preg_match('/\#(.*?)#/', $file, $match); print_r($match); ceci produirait array( [0]=> #hello world# ) 

0
Jevon McPherson

Il me semble qu'il vous suffit d'obtenir $match[1]:

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

Obtenez-vous des résultats différents?

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