2012-07-04 2 views
0

Прямо сейчас у меня есть два регулярных выражения, что делает это:Регулярные выражения в C++

Regex-1 = "(\\{(\\w+)\\})"; 
Regex-2 = "(\\{([^\\|]*)\\|([^\\|]*)\\|([^\\|]*)\\})"; 

Я просто хочу, чтобы иметь возможность объединить два Regex в один, так что, когда-либо Regex поиск первым будет матч ,

Концептуально я думаю regex-1 || регулярное выражение-2. Можно ли их комбинировать?

Спасибо.

+0

Можете ли вы представить пару примеров того, что вы пытаетесь сопоставить? – JDB

+0

rubular.com/r/YxzHacVbtd Regex-1 соответствует только если в фигурных скобках всего 1 значение. Regex-2 соответствует 3 значениям. –

ответ

1

Вы имеете в виду вот это?

Regex-1_2 = "(\\{(\\w+)\\})|(\\{([^\\|]*)\\|([^\\|]*)\\|([^\\|]*)\\})"; 

EDIT:

Так, что-то вроде этого?

{(((\w+)|({\w+}))\|?)*} 

EDIT 2:

Ваш последний комментарий поможет. Итак, работа от начала до конца. Вы знаете, что вы хотите, чтобы соответствовать открывающей фигурной скобке, так что часть легко:

{ 

Теперь, после первой фигурной скобки, есть два варианта. Либо будет один или несколько буквенно-цифровых символов (или подчеркивание), или будут три группы из нуля или более символов, разделенных по трубам. Первые две группы должны быть не-трубными символами, а последняя группа должна быть не фигурными символами скобок (так как фигурная скобка закрывает выражение). Это может быть выражено с помощью конструкции чере:

{(\w+|[^|]*\|[^|]*\|[^}]*) 

Наконец, выражение заканчивается фигурной скобкой:

{(\w+|[^|]*\|[^|]*\|[^}]*)} 

Это работает на примере вы предоставили. Если ваши правила отличаются или более конкретны, вам нужно будет сказать это.

+0

закрыть, но не совсем .. это работает, если Regex-1 совпадает с первым, но если Regex-1 совпадает с Regex-2, то он не работает. –

+0

http://www.rubular.com/r/YxzHacVbtd –

+0

@unwiseguy - обновил мой ответ. – JDB

Смежные вопросы