정규식에서 역슬래시 표현할 때 역슬래시 3개 사용하는 이유?

정규식에서 역슬래시 표현할 때 역슬래시 3개 사용하는 이유?

QA

정규식에서 역슬래시 표현할 때 역슬래시 3개 사용하는 이유?

답변 1

본문

 

$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\
*/
?>
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 42
© SIRSOFT
현재 페이지 제일 처음으로