keyName = L"(CONSTRAINT\\s+\\w\\s+)?\\s+FOREIGN\\s+kEY\\s+(\\s+id\\s+)\\s+REFERENCES\\s+leagues\\s+(\\s+id\\s+)\\s+";
createCommand = L"CREATE TABLE OWNERS(OWNERID INTEGER PRIMARY KEY, ID INTEGER, OWNERNAME VARCHAR(100),FOREIGN KEY(ID) REFERENCES LEAGUES(ID))";
std::wregex pattern( keyName, std::regex_constants::icase );
std::wsmatch findings;
if( std::regex_match( createCommand, findings, pattern ) )
{
auto start = findings[1].first - createCommand.begin();
auto end = findings[1].second - createCommand.begin();
printf( "Match found" );
}
< /code>
Этот код не находит совпадение. < /p>
Чего мне не хватает?(CONSTRAINT\\s+\\w+\\s+)?FOREIGN\\s+kEY\\s*\\(\\s*(\\')?id(\\')?\\s*\\)\\s*REFERENCES\\s+(\\')?leagues(\\')?\\s*\\(\\s*(\\')?id(\\')?\\s*\\)\\s*"
< /code>
И это не соответствует. Странно, но хорошо. < /P>
Теперь я буду использовать следующее: < /p>
if( std::regex_search( createCommand, findings, pattern ) )
{
auto start = findings[0].first - createCommand.begin();
auto end = start + keyName.length();
printf( "Match found" );
}
где имя ключа - это шаблон для совпадения/поиска. Это хорошо? Будет ли keyname.length () даст мне правильную длину, и позиция запуска и end будет установлена правильно?
std::wregex pattern( keyName, std::regex_constants::icase ); std::wsmatch findings; if( std::regex_match( createCommand, findings, pattern ) ) { auto start = findings[1].first - createCommand.begin(); auto end = findings[1].second - createCommand.begin(); printf( "Match found" ); } < /code> Этот код не находит совпадение. < /p> Чего мне не хватает?(CONSTRAINT\\s+\\w+\\s+)?FOREIGN\\s+kEY\\s*\\(\\s*(\\')?id(\\')?\\s*\\)\\s*REFERENCES\\s+(\\')?leagues(\\')?\\s*\\(\\s*(\\')?id(\\')?\\s*\\)\\s*" < /code> И это не соответствует. Странно, но хорошо. < /P> Теперь я буду использовать следующее: < /p> if( std::regex_search( createCommand, findings, pattern ) ) { auto start = findings[0].first - createCommand.begin(); auto end = start + keyName.length(); printf( "Match found" ); } [/code] где имя ключа - это шаблон для совпадения/поиска. Это хорошо? Будет ли keyname.length () даст мне правильную длину, и позиция запуска и end будет установлена правильно?