사용자가 제공 한 문자열이 있다고 가정 해보십시오. 그것은 모든 종류의 문자를 포함 할 수 있습니다. 예는 다음과 같습니다 C++ 11/regex - 정확한 문자열 검색, 이스케이프
std::string s1{"hello world");
std::string s1{".*");
std::string s1{"*{}97(}{.}}\\testing___just a --%#$%# literal%$#%^"};
...
가 지금은
<<
다음에 입력 문자열
s1
다음
>>
의 발생에 대한 몇 가지 텍스트로 검색 할.
s1
는 특수 문자를 포함하지 않은 경우이 잘 작동
std::string input; // the input text
std::regex regex{">> " + s1 + " <<"};
if (std::regex_match(input, regex)) {
// add logic here
}
:이를 위해, 나는 다음과 같은 코드가 있습니다. 그러나 s1
에 정규식 엔진에서 인식 할 수있는 특수 문자가 있으면 작동하지 않습니다.
s1
에서 std::regex
이 리터럴로 간주되므로 어떻게 s1
을 해석하지 않습니까? 즉, 정규식은 다음과 같아야합니다 std
에 ESCAPE()
같은 기능은
std::regex regex{">> " + ESCAPE(s1) + " <<"};
있습니까?
중요 나는 내 질문을 단순화했습니다. 제 실제의 경우, 정규식은 훨씬 더 복잡합니다. s1
이 해석된다는 사실만으로 문제가 발생하기 때문에이 세부 정보를 남겼습니다.
정규식을 사용해야하는 특별한 이유가 있습니까? 이것은'string.find'로 할 수 있습니다. –
왜 입력 문자열 _ ('s1')을 정규식으로 사용합니까 ?? 아마도'std :: regex Regex { ">> * <<"}}와 같은 것이 더 좋을까요? – ForceBru
@Austin Brunkhorst 네, 제 경우에는 정규 표현식이 필요합니다. 나는 그 문자열이 엔진에 의해 해석된다는 사실만을 고민하면서이 질문을 단순화했습니다. 제 실제의 경우, 정규식은 더 복잡합니다. –