2017-11-16 1 views
0

I 다음 문자열이 있습니다(즉, 백 슬래시는 이스케이프 문자로 동작하므로) 백 슬래시와 따옴표를 포함하는 정규식을 수정

boost::regex re_arg_values("('[^']*(?:''[^']*)*')"); 
:

arg1('value1') arg2('value '')2') arg3('value\'3') 

정규식은 값이 같다 추출을

이제이 정규 표현식은 '값 \'3 '을 추출 할 수 없습니다. 정규식을 수정하여 괄호 안에 \ '을 (를) 고려하는 방법은 무엇입니까?

참고하시기 바랍니다. 값에는 공백, 특수 문자 및 탭이 포함될 수 있습니다. 코드는 CPP입니다.

미리 감사드립니다.

+0

이렇게하면 - ['('[^'] * (? : '[[^'] *) * '[^]] *)'] (https://regex101.com/r/d3nOG2/1)? – Gurman

+0

모바일에서 글을 쓰고 싶다면''('[^ \\\\'] * (? :(''| \\\\.) [^ \\\ '] *) *') " '. 줄 바꿈 문자열이있는 경우'. \ '를'[\\ s \\ S]'로 대체하십시오. SO 주석에서 복사하여 붙여 넣기하면 가비지 문자가 생길 수 있으므로 보이지 않는 문자가 있는지 확인하십시오. –

+0

@ WiktorStribiżew, 작동하지 않습니다. – hydra123

답변

0
boost::regex re_arg_values("\('([^'\\]|''|\\.)*'\)"); 

\(''\) 일치 경계. 주어진 패턴

[^'\\] 일치 일반 문자의 일치에 대한

(, |)*.

''은 작은 따옴표 쌍과 일치합니다.

\\.은 이스케이프 처리 된 문자 (스택 백 슬래시 포함)와 일치합니다.

관련 문제