Vu qu'il s'agit de parser du code PHP, peut-être que l'utilisation du tokenizer serait plus adapté, exemple:
1 2 3 4 5
| $str = '<?php echo gTrad(" et fini par ");?>';
$arr = token_get_all($str);
print_r($arr); |
Après, tout dépend de ce que tu cherches à en faire par la suite.
Sinon, via regex, puisque tu recherches pratiquement un chaîne fixe mise à part la chaîne de caractère passée en argument de gTrad(), le plus pratique serait d'encadrer les parties fixes avec \Q et \E ce qui permet aux caractères spéciaux (ici, les parenthèses et les points d'interrogations) de ne pas être interprétés:
$pattern = '~\Q<?php echo gTrad("\E[^"]*\Q");?>\E~';
Autre méthode, toujours en s'appuyant sur les parties fixes, mais cette fois-ci en utilisant strpos():
1 2 3 4 5 6 7 8
| $pos1 = strpos($str, '<?php echo gTrad("');
$pos2 = strpos($str, '");?>', $pos1+18);
$result = substr($str, $pos1, $pos2 + 5);
$param = substr($str, $pos1 + 18, $pos2 - $pos1 - 18);
print_r($result);
print_r($param); |
Le point faible de cette dernière méthode est qu'elle suppose qu'une sous-chaîne commençant par <?php echo gTrad(" va forcément s'achever par ");?> ce qui peut produire un résultat complètement faux si ce n'est pas le cas.
Partager