내 질문은 간단한 질문이며 정규 표현식 이스케이프에 관한 것입니다. /
정규식에서 슬래시를 이스케이프해야 합니까? 그리고 어떻게 하시겠습니까?
myStr.replace(/[/:.-]+/gi, '_')
놀랍게도 유효합니다. 나는 내가 필요하다고 생각했다 /[\/:.-]+/gi
. 이것이 멋지거나 혼란 스러운지 결정할 수 없습니다.
내 질문은 간단한 질문이며 정규 표현식 이스케이프에 관한 것입니다. /
정규식에서 슬래시를 이스케이프해야 합니까? 그리고 어떻게 하시겠습니까?
myStr.replace(/[/:.-]+/gi, '_')
놀랍게도 유효합니다. 나는 내가 필요하다고 생각했다 /[\/:.-]+/gi
. 이것이 멋지거나 혼란 스러운지 결정할 수 없습니다.
답변:
다음은 몇 가지 옵션입니다.
Perl에서는 대체 구분 기호를 선택할 수 있습니다. 당신은에 국한되지 않습니다 m//
. 같은 다른 것을 선택할 수 있습니다 m{}
. 그런 다음 탈출이 필요하지 않습니다. 사실 "Perl Best Practices"의 Damian Conway는 이것이 사용해야 m{}
하는 유일한 대체 구분 기호라고 주장하며 이는 Perl :: Critic (CPAN에서)에 의해 강화됩니다. 당신은 대체 구분 문자의 다양한 사용하여 멀리 얻을 수 있지만 //
및 {}
나중에 해독 깨끗한 것 같다. 그러나 이러한 선택 중 하나가 너무 많이 이스케이프되는 경우 가독성에 가장 적합한 것을 선택하십시오. 일반적인 예는 m(...)
, m[...]
및 m!...!
입니다.
당신은 하나 또는 다른 구분 기호를 사용하지 않으 수없는 경우에, 당신은 백 슬래시 슬래시를 탈출 할 수 있습니다 m/\/[^/]+$/
(예를 들어이 될 수있는 대체 구분하여 m{/[^/]+$}
더 명확하게 읽을 수있다). 백 슬래시로 슬래시를 피하는 것은 이름과 위키피디아 페이지 인 Leaning Toothpick Syndrome 을 얻을 수있을만큼 일반적 입니다. 단 하나의 인스턴스 만있는 정규식에서 슬래시를 이스케이프하는 것은 가독성을 저해하는 수준으로 올라가지 않을 수 있지만 손을 떼기 시작하고 언어가 Perl처럼 대체 구분 기호를 허용하는 경우 선호하는 솔루션입니다.
perl -pi -e "s/chdir .*/chdir $ROBOT_PATH/g" startup_scripts/supervisord.conf
그리고 나는 슬래시와 충돌합니다.
perl -pi -e "s{chdir .*}{chdir $ROBOT_PATH}g" startup_scripts/supervisord.conf
...하지만 이것은 아마도 더 낫습니다 : perl -pi -e 's/chdir .*/chdir $ENV{ROBOT_PATH}/g' startup_scripts/supervisord.conf
쉘 보간을 피하기 때문입니다.
/
문자 를 이스케이프하는 대안 은 ASCII 인코딩으로 문자를 16 진수 또는 8 진수로 지정하는 정규식 기능을 사용하는 것입니다. 펄은 8 진수 형태로 받아들 \57
(소스 regular-expressions.info/refcharacters.html )
백 슬래시를 사용 \
하거나 다른 구분 기호를 선택, 즉 m#.\d#
대신 /.\d/
"당신이 (일치) 문자 m와 함께보다 선행하는 경우에 펄, 당신은 다른 어떤 특수 문자에 / 정규 표현식 구분 기호를 변경할 수 있습니다"