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

정규식 관련 질문드려요.. 채택완료

포도주스와 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가 나오는 것이고요
로그인 후 평가할 수 있습니다

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

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

로그인