正则表达式 - 请教一个 c++11的 正则语法
怪我咯
怪我咯 2017-04-17 15:25:28
0
3
590

R"xxx()xxx": xxx可以被替换成任何字符串,不可以包含括号和双引号,而且你需要保证两边是一样的。如果你这样写,那么括号里面的任何字符都不会被转义,甚至是换行符也没有问题。这种字符串语法用来写正则表达式就特别的方便。

可以详细说下用法吗, 感觉不是很理解.

怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답(3)
阿神

당신이 이해하지 못하는지R혹은xxx모르겠으니 다 알려드릴게요

RRaw String을 대표하는

부터 시작하겠습니다.

예를 들어 다음 텍스트

으아악

Raw String이 있기 전에는 이렇게 써야 했어요

으아악

문자열의 특수 기호는 이스케이프되어야 합니다

근데 Raw String를 하고 나면 이렇게 쓰면 됩니다

으아악

즉, 괄호 Raw String 안의 텍스트는 What you see is what you get

입니다.

왜 괄호가 필요한지 궁금하실 겁니다.

텍스트에 대해 생각해 보세요

으아악

괄호가 없으면 R"abc"efg"로 쓰여지므로 쌍따옴표
가 어느 것인지 판단이 불가능하므로

괄호를 도입한 후 원문에 따옴표 괄호가 있으면 어떻게 되나요? 예를 들어
으아악

위의 작성 방법에 따르면

로 써야 하는데, 이는 명백히 문법적 오류를 낳을 것이며 어떤 쌍이 R"(abc)"efg)")"
인지 판단하는 것이 불가능할 것입니다. 텍스트에 이 포함되어 있습니다. )"()을 구분하기에 충분하지 않습니다.

따라서 질문의 delimiter(구분 기호) 을 사용자 정의해야 합니다. xxx(...)xxx 위의 문자열은
, 이를 통해 컴파일러는 R"xxx(abc)"efg)xxx"에 포함된 내용이 모두 원본 텍스트임을 구별할 수 있습니다.
물론 xxx(...)xxx을 사용자 정의하여
xxx로 작성할 수도 있습니다.

巴扎黑

C 11의 원시 문자열 리터럴입니다

으아악

출력

으아악

즉, 대괄호 사이의 문자는 이스케이프되지 않고 그대로 출력됩니다.
""는 정규식에서 자주 사용되기 때문에 이 방법을 사용하면 ""를 "\"로 변환하는 문제를 피할 수 있습니다.
예:

으아악

이 방법을 사용하지 않는 경우 다음과 같이 작성해야 합니다.

으아악
阿神

사용자 정의 분할 문자열의 목적: 원시 문자열이 끝나는 위치를 식별합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿