Я хочу знать, как я могу получить имена групп захвата в регулярном выражении в boost.
Например, если пользователь вводит строку, которая должна быть допустимым регулярным выражением с именованными группами захвата, как можно выполнить итерацию по списку определенных групп в регулярном выражении и получить имена этих групп. Предоставляет ли boost средства для этого, или я должен написать свой собственный синтаксический анализатор для извлечения этих имен?
Например, если входная строка:
(?<year>[0-9]{4}).*(?<month>[0-9]{2}).*(?<day>[0-9]{2})
Я хочу иметь возможность извлекать «год», «месяц» и «день» из регулярного выражения.
class named_subexpressions
в boost_regex.hpp. Его можно изменить, чтобы создать карту фактических имен строк. Где вы можете добавить вызов, чтобы вернуть проиндексированное имя группы. - person   schedule 11.04.2016classnamed_subexpressions{public:...voidset_name(constcharT*i,constcharT*j,intindex){...std::stringstmp(i,j);intalen=(int)stmp.length();if(alen>0){longest_name=alen>longest_name?alen:longest_name;m_sub_sNames[index]=stmp;}}std::stringget_name(intndx)const{if(longest_name>0){autogroupName=m_sub_sNames.find(ndx);if(groupName!=m_sub_sNames.end())returngroupName->second;}return"";}intget_longest_namelen(){returnlongest_name;}private:intlongest_name;std::map<int,std::string>m_sub_sNames;...};
- person   schedule 11.04.2016std::string grpname = rxobj.get_named_subs()->get_name( grpnum ); if (grpname.length() > 0) { ...}
- person   schedule 11.04.2016