Я пытаюсь разобрать эту строку:
$right = '34601)S(1,6)[2] - 34601)(11)[2] + 34601)(3)[2,4]';
со следующим регулярным выражением:
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);
Я хочу вернуть массив следующим образом:
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]
)
но я возвращаю только следующее:
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]
)
Я думаю, это из-за [^)] * или [^]] * в слове,
но как я должен исправить регулярное выражение для сопоставления этого по-другому?
Я попытался указать это:
\d+(?:[,#]\d+){0,}
так слово стало
const word = '(\d{3}\d{2}\)S{0,1}\(\d+(?:[,#]\d+){0,}\)S{0,1}\[\d+(?:[,#]\d+){0,}\])';
но это ничего не дает