0
J'essaie d'analyser cette chaîne:chaîne d'analyse avec une expression régulière
$right = '34601)S(1,6)[2] - 34601)(11)[2] + 34601)(3)[2,4]';
avec regexp suivant:
const word = '(\d{3}\d{2}\)S{0,1}\([^\)]*\)S{0,1}\[[^\]]*\])';
preg_match('/'.word.'{1}(?:\s{1}([+-]{1})\s{1}'.word.'){0,}/', $right, $matches);
print_r($matches);
je veux revenir tableau comme ceci:
Array
(
[0] => 34601)S(1,6)[2] - 34601)(11)[2] + 34601)(3)[2,4]
[1] => 34601)S(1,6)[2]
[2] => -
[3] => 34601)(11)[2]
[4] => +
[5] => 34601)(3)[2,4]
)
mais je retour seulement suivant:
Array
(
[0] => 34601)S(1,6)[2] - 34601)(11)[2] + 34601)(3)[2,4]
[1] => 34601)S(1,6)[2]
[2] => +
[3] => 34601)(3)[2,4]
)
Je pense, c'est à cause de [^)] * ou [^]] * dans le mot, mais comment je dois corriger regexp pour faire correspondre cela d'une autre manière?
Je tryied de le préciser:
\d+(?:[,#]\d+){0,}
si mot devient
const word = '(\d{3}\d{2}\)S{0,1}\(\d+(?:[,#]\d+){0,}\)S{0,1}\[\d+(?:[,#]\d+){0,}\])';
mais il ne donne rien
Eh bien, je l'utilise, et cela fonctionne preg_match_all ('/ (?: \ S {1} ([+ -] {1}) \ s {1}) {0,}' mot. '/', $ Droite, $ correspond); – llamerr
donc il fonctionne avec ceci preg_match_all ('/ (?: \ S {1} ([+ -] {1}) \ s {1}) {0,}'. Mot. '/', $ Droite, $ matches); et une autre question, puis-je faire correspondre toutes les occurrences de mot après le premier mot avec preg_match, ou je dois utiliser preg_match_all? – llamerr