разбирать строку с регулярным выражением - PullRequest
0 голосов
/ 03 июня 2010

Я пытаюсь разобрать эту строку:

$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,}\])';

но это ничего не дает

1 Ответ

0 голосов
/ 03 июня 2010

хорошо, я использую это, и оно работает

preg_match_all('/(?:\s{1}([+-]{1})\s{1}){0,}'.word.'/', $right, $matches);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...