테스트 사이트 - 개발 중인 베타 버전입니다

정규표현식 의미 해석 좀 해주세요. 채택완료

sinbi 3년 전 조회 2,696

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

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

 

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

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

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
3년 전

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

 

e.g.

 

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

</p>

<p>/\\\///a/bc/def</p>

<p>></p>

<p>////a/bc/def</p>

<p>

 

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

</p>

<p>////a/bc/def</p>

<p>></p>

<p>/a/bc/def</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

s
sinbi
3년 전
^/\\\{1,}
위 부분을 말로 풀어서 설명해주시면 감사하겠습니다.
^ : 시작부분
{1,} : 1개 이상
이렇게 파편적으로는 아는데, 가운데 부분이랑 연결해 해석하려니 막히네요.
배르만
3년 전
[code]
^ / \ \ \ { 1 , }
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ └─ matched-(string / group) 의 연속되는 search count 반복 끝을 알림
│ │ │ │ │ │ │ │ └─ 검색될때까지
│ │ │ │ │ │ │ └─ ~
│ │ │ │ │ │ └─ 1 번 일치
│ │ │ │ │ └─ 바로 앞 matched-(string / group) 의 연속되는 search count 반복 시작을 알림
│ │ │ │ └─ backslash
│ │ │ └─ 이스케이프 시퀀스 for backslash
│ │ └─ 이스케이프 시퀀스 for backslash's backslash
│ └─ / 로 시작
└─ 뒤 이어 오는 문자열로 string 이 시작됨을 의미
[/code]
s
sinbi
3년 전
아주 자세히 설명해 주셔서 정말 감사합니다.

근데, 왜 아래 부분이 필요한지는 잘 모르겠어요.
이스케이프 시퀀스 for backslash's backslash
백슬래시 회피 위해 백슬래시 넣으면 그걸로 족한 거 아닌가요?
배르만
3년 전
https://www.php.net/manual/en/regexp.reference.escape.php

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

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

그말은 \ 하나를 찾으려면
[code]
// preg_match(정규식 표현절, 문자열);
preg_match('/\\\/', '\\');
[/code]
형태가 되야 한다는 말입니다.

하지만 정확하게는 \ 하나를 매칭시키기 위해
\\\ 3개가 아닌
\\\\ 4개를 사용해야 합니다.
[code]
preg_match('/\\\\/', '\\');
[/code]
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.
s
sinbi
3년 전
자세한 설명과 좋은 좌표 소개 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인