2016-08-13 4 views
-2

사실 저는 미니 프로젝트 용 웹 크롤러를 작성하고 있습니다. 입력 된 웹 사이트에만 속한 웹 페이지 만 크롤링하고 싶습니다. 내 웹 크롤러가 현재 제공된 입력 이외의 다른 웹 사이트로 크롤링하지 않도록하고 싶습니다.preg_match() 함수에서 다른 패턴과 함께 변수를 패턴으로 사용하는 방법은 무엇입니까?

이 내가 뭘하는지입니다 : $url = $_POST["url"]; $web = @file_get_contents($url); preg_match_all("/<a\s.*href=\"(.*)\"/U", $web, $matches); 내가하고 싶은 것은 : 예를 들어 $url = $_POST["url"]; $web = @file_get_contents($url); preg_match_all("/<a\s.*href=\"(.*$url.*)\"/U", $web, $matches); : 는 입력 : https://www.google.com/ 다음 정규 표현식은 다음과 같아야합니다 preg_match("/.*google.com.*/U", xyz, xyz); 다른 제안이 도움이 될 것입니다, 미리 감사드립니다.

+0

Naruto kun에 오신 것을 환영합니다. 분명한 질문을하면 도움이 될 것입니다. 이 기사를 읽고 좋은 대답을 얻으십시오 http://stackoverflow.com/help/how-to-ask –

답변

0

구분 기호를 URL에없는 것으로 변경하십시오.

preg_match_all("#<a\s.*href=\"(.*$url.*)\"#U", $web, $matches); 

나는 해결책을 발견 preg_quote

+0

파운드 기호는 URL에 있지만 어쨌든 도움이 될 수 있습니다. – keyboardSmasher

0

로 $ URL을 탈출 아마 더 나은 편집, 여기에 솔루션입니다. 정규 표현식과 함께 변수를 사용하려는 경우.

preg_match_all("/<a\s.*href=\"(.*" . preg_quote($url, "/") . ".*)\"/U", $web, $matches); 
           ^^^^^^^^^^^  ^^^^

점들이 몇 가지 다른 언어 + 같다 :

preg_match("/regular_expression".($my_variable)."regular_expression/U", $source, $matches); 
+0

'$ my_variable'에''/''을 쓰면 어떨까요? –

+0

기본적으로 필자의 경우 $ my_variable은 웹 페이지의 이름이므로 변수에 "/"가 올 가능성은 없습니다. 그리고 "/"를 포함 시키려면 "/"앞에 "\"를 붙이십시오. 예를 들어 : 링크에 대한 정규 표현식을 쓰고 싶다면 ..'preg_match ("/https:\/\/.*\.com/U", xyz, xyz); ' –

+0

변수를'preg_quote '할 필요가있다. 귀하의 정규 표현식 인 추가 문자가 있습니다. –

0

진짜 해결책은 실제 정규식 구분 기호와 preg_quote를 사용하고 도트 구문 정규식 리터럴 부분 부분을 추가하는 것입니다 문자열 연결에 사용되며 preg_quote은 변수 문자열의 모든 특수한 정규 표현식 메타 문자가 올바르게 이스케이프 처리되는지 확인합니다.

관련 문제