Latest post of the previous page:
В фаре увидел RegExp.cpp/hpp, только не знаю, как им пользоваться. Просто подключение RegExp.hpp к пустому проекту Win32 Console application в VS 2015 выдаёт кучу ошибок при попытке компиляции.DrKnS wrote:Ну в процитированном же всё написано: изобразите регекс, который матчит дефолтный "<>|& не в кавычках" - добавим.
В-общем, я пробовал с std::regex, но вот только они не поддерживают lookbehind.
Если с lookbehind (например PCRE), то:
(?<=^(?:[^"]*|"[^"]*")*)[<>|&]
Тестил в RegexBuddy (тип регэкспа - PCRE или C#).
Без lookbehind-а, работает с std::regex:
^(?:[^\"]|\"[^\"]*\")*?[<>|&]
Code: Select all
#include <iostream>
#include <regex>
using namespace std;
void testRX(wstring str, wregex rx, bool expectedResult) {
bool result = regex_search(str, rx);
wcout << L"\"" << str << L"\": " << endl << " " << (result ? "true" : "false");
if (result != expectedResult)
wcout << L" FAILED";
wcout << endl;
}
int main() {
wregex tooComplexRX(L"^(?:[^\"]|\"[^\"]*\")*?[<>|&]");
testRX(L"grep word file", tooComplexRX, false);
testRX(L"grep \"[<>|&]\" file", tooComplexRX, false);
testRX(L"echo \"&\"", tooComplexRX, false);
testRX(L"grep word file | grep word2", tooComplexRX, true);
testRX(L"grep word file && echo found", tooComplexRX, true);
testRX(L"backup 2>err.log", tooComplexRX, true);
}