2016-06-17 2 views
0

나는 this is a \ string \\ with escaped \n characters \t .정규식을 사용하여 C++에서 백 슬래시를 바꾸는 방법은 무엇입니까?

같은 문자열 내가 두 번하고자 한 각 \this is a \\ string \\\\ with escaped \\n characters \\t .

분명히 선형 적으로 문제를 해결할 수 있습니다 검색 할 수 있습니다. 나는 그것을 달성하는 더 우아한 방법이 있는지 궁금해.

My g ++ 컴파일러는 버전 4.2이며 c++0x, c++11을 지원하지 않습니다. 그리고 부스트 버전 1.46.1이 설치되어 있는데, 여기에는 <boost/regex.hpp>이 포함되어 있습니다.

이 응용 프로그램은 효율성에 민감하므로 선형 접근 방식이 바람직합니다.

나는 이것을 post으로 읽고 regex.hpp가 작동한다고 생각합니다. 하지만 재귀 적 대체가 없도록 쿼리와 바꾸기 함수를 공식화하는 방법을 모르겠습니다.

+0

Boost.Algorithm.String가'replace_all'입니다. 그것보다 훨씬 더 우아해질 수는 없습니다. – chris

+0

@chris : 그러면''\\''을''\\\\''로 변환 할 것입니다, 그렇지 않습니까? – Cornstalks

+0

''\\\''문자열을 어떻게 이스케이프할까요? ''\\\\''는 어떨까요? 등등? – Cornstalks

답변

0

replace_all을 사용하여 백 슬래시의 모든 인스턴스를 교체하고 선택적 백 슬래시와 두 개의 백 슬래시를 교체하십시오.

도주 권리를 얻는 것은 고통입니다. 정규식에서 백 슬래시는 이스케이프해야합니다. 그런 다음 각 백 슬래시는 문자열 표현에서 벗어나야합니다.

은 그래서 C++ 문자열로 정규식

"\\\\\\\\?" 
+0

@Cornstalks가 몇 가지 잠재적 인 문제를 지적한 후에 제 질문이 수정되었습니다. 당신의'replace_all' 제안이 효과가 있습니다. 정규 표현식을 사용할 필요가 없습니다. Cornstalks에게'\\\','\\\\ '에 대한 질문에 많은 감사를드립니다. – user3813057

0

수 없습니다. 당신이 한 것처럼 백 슬래시를 두 번 입력하십시오. 그러나 외부 프로그램을 사용하여 키 biding이나 특정 단어 (이 경우에는 백 슬래시 만)를 감지하고 원하는 입력 (이 경우, 이중 백 슬래시)으로 대체 할 수 있습니다. 그러나 그것은 제가 정보를 얻는 한 오래갑니다.

+0

이 역 슬래시는 아마도 런타임 문자열에있을 것입니다. 그 (것)들을 대체 할 수 없으면 놀라게 할 것입니다. – chris

관련 문제