정규식에서 역슬래시 표현할 때 역슬래시 3개 사용하는 이유?
본문
$wr_content = preg_replace("#[\\\]+$#", "", $wr_content);
맨왼쪽 슬래시부터 1,2,3으로 이름 붙여서 설명 좀 해주세요.
PS1. 아래처럼 이해하는 게 맞는 것일까요?
3이 이스케이프여서 2가 붙어 역슬래시특수문자로 만드는 거고,
이 특수문자화 된 것을 1이 붙어 이스케이프하는 거라 이해하면 되나요? (어렵당.)
PS2. 채찍피티가 이런 말을 하더라구요. 왜 4개가 필요하다고 하는 걸까요? 3개도 어려운데...ㅜㅜ?
따라서 \\\
는 정규 표현식에서 하나의 역슬래시를 나타냅니다. 예를 들어, 정규 표현식 안에서 역슬래시 문자 자체를 찾고 싶다면 \\\\
와 같이 네 개의 연속된 역슬래시를 사용해야 합니다.
답변 1
https://www.php.net/manual/en/regexp.reference.escape.php
먼저 php regular expression 에서는 의미 없는 문자로써 \ 하나를 표현하기 위해
\\\ 3개가 아닌 \\\\ 4개를 사용하는것이 정석이고
2개씩 묶는 방식으로 이해하면 수월할것 같습니다.
// \\ = \
// \\\\ = \\
$wr_content = preg_replace('#[\\\\]+$#', '', $wr_content);
// │/│/
// │ │
// │ └─ backslash
// │
// └─ backslash (escape sequence)
추가로 완전한 문자열 표현에서는 " 보다는 ' 를 사용하는 쪽이
해석을 추가로 하지 않기 때문에 조금이나마 이득입니다.
e.g.
$wr_content = 'a\\b\\\\c\\';
$wr_content = preg_replace('#\\\\\\\\#', '', $wr_content);
<?php
$wr_content = 'a\\b\\\\c\\';
echo 'before: ' . $wr_content . PHP_EOL;
$wr_content = preg_replace('#\\\\\\\\#', '', $wr_content);
echo 'after : ' . $wr_content . PHP_EOL;
/*
before: a\b\\c\
after : a\bc\
*/
?>
답변을 작성하시기 전에 로그인 해주세요.