problème avec PHP regex
-
13-10-2019 - |
Question
je veux analyser un fichier de modèle et trouver un ensemble spécifique de variables qui ressemblent à ce que:
<!-- [LOOP-VARIABLENAME] -->
Je veux juste obtenir le variablename et la position de départ du match. premier i utilisé strpos (), mais ceci est fonction ne peut pas prendre un argument regex.
Array (
[0] => 1678 // strpos
[1] => <!-- [LOOP-VARIABLENAME] --> // full match
[name] => VARIABLENAME
)
est-ce possible? J'ai essayé d'utiliser cette expression rationnelle:
preg_match_all('/<!-- [LOOP-(?P<year>\W+)/', $html, $matches, PREG_OFFSET_CAPTURE);
mais aucun résultat positif.
Merci pour votre aide.
La solution
<?php
$html = "jg<!-- [LOOP-VARIABLENAME] -->sdfsdfsdf<!-- [LOOP-TESTNAME] -->sfdsdffsd";
preg_match_all('/<!-- \[LOOP-(\w+)]\ -->/', $html, $matches, PREG_OFFSET_CAPTURE);
echo '<pre>' . print_r($matches, true) . '</pre>';
?>
Ce code donne une sortie comme ceci:
Array
(
[0] => Array
(
[0] => Array
(
[0] =>
[1] => 2 //position where matching <!-- starts, 1st var
)
[1] => Array
(
[0] =>
[1] => 39 //position where matching <!-- starts, 2nd var
)
)
[1] => Array
(
[0] => Array
(
[0] => VARIABLENAME
[1] => 13 //position where VARIABLENAME starts
)
[1] => Array
(
[0] => TESTNAME
[1] => 50 //position where TESTNAME starts
)
)
)
Si ce tableau ne semble pas tout à fait la façon dont vous le souhaitez, je peux écrire un peu plus de code pour le transformer.
Autres conseils
On dirait que vous n'êtes pas échapper à vos caractères spéciaux .. par exemple,
[LOOP
doit être
\[LOOP
dans votre modèle regex.
Merci pour votre réponse, mais a essayé ceci déjà
preg_match_all('/<!-- \[LOOP-(?P<name>\W+)/', "<!-- [LOOP-VARIABLENAME] -->", $matches, PREG_OFFSET_CAPTURE);
print_r ($ matches);
les regards de sortie comme ceci:
Array ( [0] => Array ( ) [name] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [name] => Array ( ) [1] => Array ( ) )