Предположим, я пытался сопоставить следующее выражение, используя regex.h в C ++, и пытался получить содержащиеся подвыражения:
/^((1|2)|3) (1|2)$/
Предположим, оно сопоставлялось со строкой "3 1", подвыражениябыло бы:
"3 1"
"3"
"1"
Если бы вместо этого было сопоставлено со строкой "2 1", подвыражения были бы:
"2 1"
"2"
"2"
"1"
Это означает, что в зависимости от того, как первое подвыражениеоценивает, последний находится в другом элементе в массиве pmatch.Я понимаю, что этот конкретный пример тривиален, так как я могу удалить один из наборов скобок или взять последний элемент массива, но он становится проблематичным в более сложных выражениях.
Предположим, все, что я хочу, это верхподвыражения высокого уровня, которые не являются подвыражениями других подвыражений.Есть ли способ получить их только?Или, альтернативно, узнать, сколько подвыражений сопоставлено внутри подвыражения, чтобы я мог пройти массив независимо от того, как он вычисляется?
Спасибо