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)
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);
Utilisez des lookarounds:
preg_match("/(?<=#).*?(?=#)/", $file, $match)
preg_match("/(?<=#).*?(?=#)/", "1232#hello world#", $match);
print_r($match)
Array
(
[0] => hello world
)
Testez-le ici.
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#
)
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?
preg_match('/1232#(.*)#$/', $file, $match);