정규식 관련 질문드려요.. 채택완료
포도주스와
11년 전
조회 4,147
$subject = "Go To page #9";
$pattern = "/([a-zA-Z]+ )+/";
echo preg_match($pattern, $subject, $matches);
echo $matches[1];
?>
에서 matches[1]은 page가 출력되는데 matcesh[1]은 ()안에 있는 패턴이니까
[a-zA-Z]+
즉 이게 'Go'와 'To'는 포함되지 않고 'page'만 해당 된다는 뜻이죠?
저 정규식을 해석해보면 영문 대소문자 모두와 +메타문자라는 소린데 그럼
Go와 To도 포함되는거 아닌가요? 근데 page가 출력되는데.. 제가 뭘 잘못알고 있는건지..
댓글을 작성하려면 로그인이 필요합니다.
답변 1개
채택된 답변
+20 포인트
11년 전
영문 대소문자만 가지고 오겠다는 것이에요.
page만 보이는 것은 matches[1]을 했기 때문이에요
print_r(matches) 로 확인 해보세요.
즉,
1. [a-zA-Z]를 하면 대소문자로 시작하는 문자
2. + 했으니 대소문자 1개 이상
3. 공백이 하나 있으니
Go공백 To공백 page공백이 나오겠죠.
그런데
()+ 했으니 마지막에 있는 page에요.
()+에서 + 빼면 Go가 나오고요.
+는 직전값을 의미 하는 것이니깐요.
()는 그룹화 이고..
설명을 잘 못하겠는데요
하여튼
Go공백(1그룹)
To공백(2그룹)
page공백(3그룹)
이렇게라고 생각할 때
마지막에 있는 + 때문에 3그룹에 있는 것을 가르키게 되요.
그래서 page가 나오는 것이고요
로그인 후 평가할 수 있습니다
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인