17
Апр
2018

Регулярное выражение на вложенность скобок

Решая очередную задачку, столкнулся с определенной сложностью. Собственно возможно ли составить такой regex, чтобы он мог выискивать парные скобки, ну и собственно при отсутствии парных скобок, выдать сообщение об ошибке. Так же regex проверяет на верность арифметических операций.

Как мой вариант решения заключается в том, чтобы просто отсеять все верное и вытащить в массив все неверные вхождения, т.е.:

preg_match_all('/  [()] | [\*\-\+\/]{2,} | [A-Za-z]+ /x', $string, $matches);

Пусть оно имеет такой вид:

$string = "43+(432)*+(43+20)/65";

собственно результат:

array (size=1)
  0 => 
    array (size=5)
      0 => string '(' (length=1)
      1 => string ')' (length=1)
      2 => string '*+' (length=2)
      3 => string '(' (length=1)
      4 => string ')' (length=1)

Далее просто прохожусь по циклу, считаю кол-во скобок и, если вдруг есть неправильное вхождение, просто выдаем сообщение об ошибке и завершаем код. (при верном кол-ве скобок и правильных данных, типа все окей)

Собственно сам вопрос, а можно ли как-нибудь обойтись без дополнительных проверок с циклами и ограничиться просто регулярным выражением? При этом я читал, что это возможно сделать только через рекурсивный шаблон, но я не вникаю как конкретно его сделать. Если кто-то делал подобные вещи, помогите)

Источник: https://ru.stackoverflow.com/questions/815479/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B5-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0-%D0%B2%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D1%81%D0%BA%D0%BE%D0%B1%D0%BE%D0%BA

Тебе может это понравится...

Добавить комментарий