정규표현식 의미 해석 좀 해주세요.

정규표현식 의미 해석 좀 해주세요.

QA

정규표현식 의미 해석 좀 해주세요.

본문

if($url){
    $url = preg_replace('#^/\\\{1,}#', '/', $url);

    if( preg_match('#^/{3,}#', $url) ){
        $url = preg_replace('#^/{3,}#', '/', $url);
    }
}

 

정규식을 아주 파편적으로 알다 보니, 정리가 안 되네요.

1이상, 3이상....뭐 그런 내용인 듯 한데...

이 질문에 댓글 쓰기 :

답변 1

$url 을 구성하는 시작 string 에서 연속된 backslash(\) 와 path-delimiter(/) 를 삭제하는 동작입니다.

 

e.g.

 

preg_replace('#^/\\\{1,}#', '/', $url);


/\\\///a/bc/def
>
////a/bc/def

 

preg_replace('#^/{3,}#', '/', $url);


////a/bc/def
>
/a/bc/def


^ / \ \ \ { 1 ,   }
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ └─ matched-(string / group) 의 연속되는 search count 반복 끝을 알림
│ │ │ │ │ │ │ │ └─ 검색될때까지
│ │ │ │ │ │ │ └─ ~
│ │ │ │ │ │ └─ 1 번 일치
│ │ │ │ │ └─ 바로 앞 matched-(string / group) 의 연속되는 search count 반복 시작을 알림
│ │ │ │ └─ backslash
│ │ │ └─ 이스케이프 시퀀스 for backslash
│ │ └─ 이스케이프 시퀀스 for backslash's backslash
│ └─ / 로 시작
└─ 뒤 이어 오는 문자열로 string 이 시작됨을 의미

아주 자세히 설명해 주셔서 정말 감사합니다.

근데, 왜 아래 부분이 필요한지는 잘 모르겠어요.
이스케이프 시퀀스 for backslash's backslash
백슬래시 회피 위해 백슬래시 넣으면 그걸로 족한 거 아닌가요?

https://www.php.net/manual/en/regexp.reference.escape.php

단순 문자열을 생각해보면 '\' 하나를 표현하기 위해 escape sequence 를 포함한 '\\' 로 기술해야 합니다.

정규식 표현절 에서는 다시 '\' 가 special character 가 되고 그것 자체를 표현하기 위해서는 escape sequence 처리가 필요한데

그말은 \ 하나를 찾으려면


// preg_match(정규식 표현절, 문자열);
preg_match('/\\\/', '\\');

형태가 되야 한다는 말입니다.

하지만 정확하게는 \ 하나를 매칭시키기 위해
\\\ 3개가 아닌
\\\\ 4개를 사용해야 합니다.

preg_match('/\\\\/', '\\');

Note:

Single and double quoted PHP strings have special meaning of backslash. Thus if \ has to be matched with a regular expression \\, then "\\\\" or '\\\\' must be used in PHP code.

답변을 작성하시기 전에 로그인 해주세요.
전체 220
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT