Je suis en train de faire correspondre une chaîne comme ceci:expression régulière pour analyser des données délimitées par canalisations entre accolades doubles
{{name|arg1|arg2|...|argX}}
avec une expression régulière
J'utilise preg_match
avec
/{{(\w+)\|(\w+)(?:\|(.+))*}}/
mais je reçois quelque chose comme ça, chaque fois que j'utilise plus de deux arguments
Array
(
[0] => {{name|arg1|arg2|arg3|arg4}}
[1] => name
[2] => arg1
[3] => arg2|arg3|arg4
)
Les deux premiers éléments ne peuvent pas contenir d'espaces, le reste peut. Peut-être que je travaille trop longtemps sur ce sujet, mais je ne trouve pas l'erreur - toute aide serait grandement appréciée.
Merci Jan
D'accord, je dois préciser alors:
Je suis en train de faire correspondre un nombre inconnu de ces expressions dans un modèle de page html. donc un substrat facile n'est pas une possibilité ...Je vais utiliser l'expression rationnelle pour trouver {{([^}] +)}} et continuer avec l'éclatement. Merci! – Jan
C'est une réponse plutôt paresseuse et transforme une tâche simple en écriture d'un million de chèques si vous voulez vraiment être sûr. Et au lieu de supprimer les parenthèses par sous-chaîne, pourquoi ne pas faire un str_replace (array ('{', '}'), '', $ string); –
Cette réponse a été écrite avant la clarification. Et l'utilisation de str_replace() ne vous permet pas de ** vérifier ** que les crochets sont dans la chaîne. – soulmerge