내 질문은 간단한 질문이며 정규 표현식 이스케이프에 관한 것입니다. /
정규식에서 슬래시를 이스케이프해야 합니까? 그리고 어떻게 하시겠습니까?
답변
어떤 맥락 / 언어? 일부 언어 /
는 패턴 구분 기호 로 사용 되므로 예, 어떤 언어 / 컨텍스트에 따라 이스케이프해야합니다. 그 앞에 백 슬래시를 넣어 이스케이프합니다. \/
PHP와 같은 일부 언어의 경우 다른 문자를 구분 기호로 사용할 수 있으므로 이스케이프 할 필요가 없습니다. 그러나 AFAIK는 모든 언어에서 유일하게 특별한 의미 /
는 지정된 패턴 구분 기호 일 수 있다는 것입니다.
답변
다음은 몇 가지 옵션입니다.
-
Perl에서는 대체 구분 기호를 선택할 수 있습니다. 당신은에 국한되지 않습니다
m//
. 같은 다른 것을 선택할 수 있습니다m{}
. 그런 다음 탈출이 필요하지 않습니다. 사실 “Perl Best Practices”의 Damian Conway는 이것이 사용해야m{}
하는 유일한 대체 구분 기호라고 주장하며 이는 Perl :: Critic (CPAN에서)에 의해 강화됩니다. 당신은 대체 구분 문자의 다양한 사용하여 멀리 얻을 수 있지만//
및{}
나중에 해독 깨끗한 것 같다. 그러나 이러한 선택 중 하나가 너무 많이 이스케이프되는 경우 가독성에 가장 적합한 것을 선택하십시오. 일반적인 예는m(...)
,m[...]
및m!...!
입니다. -
당신은 하나 또는 다른 구분 기호를 사용하지 않으 수없는 경우에, 당신은 백 슬래시 슬래시를 탈출 할 수 있습니다
m/\/[^/]+$/
(예를 들어이 될 수있는 대체 구분하여m{/[^/]+$}
더 명확하게 읽을 수있다). 백 슬래시로 슬래시를 피하는 것은 이름과 위키피디아 페이지 인 Leaning Toothpick Syndrome 을 얻을 수있을만큼 일반적 입니다. 단 하나의 인스턴스 만있는 정규식에서 슬래시를 이스케이프하는 것은 가독성을 저해하는 수준으로 올라가지 않을 수 있지만 손을 떼기 시작하고 언어가 Perl처럼 대체 구분 기호를 허용하는 경우 선호하는 솔루션입니다.
답변
백 슬래시를 사용 \
하거나 다른 구분 기호를 선택, 즉 m#.\d#
대신 /.\d/
“당신이 (일치) 문자 m와 함께보다 선행하는 경우에 펄, 당신은 다른 어떤 특수 문자에 / 정규 표현식 구분 기호를 변경할 수 있습니다”
답변
구분 기호가 /이면 이스케이프해야합니다.
답변
C #을 사용하는 경우에는 이스케이프 할 필요가 없습니다.
답변
자바의 경우 그럴 필요가 없습니다.
eg: "^(.*)/\\*LOG:(\\d+)\\*/(.*)$" ==> ^(.*)/\*LOG:(\d+)\*/(.*)$
/ 앞에 \를 넣으면. IDE는 “ReGex에서 중복 문자 이스케이프”\ / “를 알려줍니다.
답변
