정규식은 한 방법 아마이다. 문제를 작은 문제로 나누고 단계적으로 전반적인 문제를 해결하십시오. 이것은 많은 문제에 적용됩니다. 예를 들어 :
- 먼저 다음 SRC는 포함을이 작업을 수행하는 수천 가지 방법이 있습니다 문자열
에서 속성 값을 가져옵니다. 정규 표현식. sscanf
:
$url = sscanf($text, '<iframe src="%[^"]')[0];
# string(126) "http://www.google.com/calendar/embed?src=canaca.../Tokyo"
그래서 이제 URL이 이미 추출 된 문자열을 가정 할 정규식은 항상 이런 식으로 형식과 URL 속성 값을 추출하는 것은 실제로 사소한이다, 나는 정규 표현식을 지원하는 다른 기능을 사용하고 있습니다. URL이므로 표준 URL 기능을 사용하여 처리 할 수 있습니다. 보자 :
- 둘째, 다시 정규 표현식을 사용할 수있는 URL에서 SRC 가치를 얻을 수있는 URL
에서 쿼리를 구문 분석합니다. 그러나 PHP에는 URL 처리와 관련된 기능이 있으므로 대신 그 기능을 사용합니다. parse_url
으로 내가 원하는 것을 정확하게 말할 수 있습니다. 그리고 이번에는 먼저 쿼리 URL의 일부가 필요합니다. 이는 물음표 뒤에 쿼리 변수가있는 부분입니다.
$query = parse_url($url, PHP_URL_QUERY);
# string(89) "src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88.../Tokyo"
이것은 이미 우리가 찾고있는 가치에 한 걸음 더 나아갔습니다. 그래서 또 다른 단계가해야 할이 :
- 셋째, PHP는 그렇게 내장하는 기능을 가지고 다시 쿼리 여기
에서 SRC 값을 구문 분석합니다. parse_str
함수가있는 URL에서 쿼리의 모든 변수를 추출 할 수 있습니다.
parse_str($query, $vars);
$src = $vars['src'];
# string(68) "[email protected].com"
그리고 지금 $src
변수에 당신이 찾고있는 값은 다음과 같습니다이 함수 매개 변수를 통해 결과를 반환,이 이제 두 줄의 코드를 필요로한다.여기
한눈 위에서 전체 코드 :
$text = '<iframe src="http://www.google.com/calendar/embed?src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8%40group.calendar.google.com&ctz=Asia/Tokyo" style="border: 0" width="800" height="600" frameborder="0" scrolling="no"></iframe>';
$url = sscanf($text, '<iframe src="%[^"]')[0];
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $vars);
$src = $vars['src'];
var_dump($url, $query, $src);
세 단계를 나타내는 다음과 같이 출력된다 : 따라서 관계없이 이들 각 단계에서 사용하는 함수있는
string(126) "http://www.google.com/calendar/embed?src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8%40group.calendar.google.com&ctz=Asia/Tokyo"
string(89) "src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8%40group.calendar.google.com&ctz=Asia/Tokyo"
string(68) "[email protected].com"
을 : 문제를 작은 부분으로 나누면 거의 항상 더 큰 문제를 해결할 수 있습니다. 또한 하위 단계 중 하나에 문제가있는 경우 전체 작업이 아닌 단일 단계 만 수정하면됩니다. 단일 정규 표현식을 사용하여이 모든 작업을 수행하면 단일 실패 지점이 생깁니다 (HTML 및 URL 세계에서 좋은 정규 표현식을 만드는 것이 중요하지 않으므로 중단 될 수 있음).
완벽한 솔루션은 예를 들어 첫 번째 단계에서 HTML 구문 분석기를 사용합니다. Tidy extension 또는 인기 DOMDocument를 확장와 예를 들어 :
// Tidy (non error-checked):
$url = tidy_parse_string($text)->body()->child[0]->attribute['src'];
// DOMDocument (non error-checked):
$url = @DOMDocument::loadHTML($text)->getElementsByTagname('iframe')
->item(0)->getAttribute('src');
HTML 파서는 HTML 요소를 이해하는 이점이있다. 위치가 변경 되더라도 특정 요소 및 특성을 찾을 수 있습니다.
그가 원하는 것을 얻지 못할 것입니다. – Loamhoof
@Loamhoof, 정정 됨, 감사합니다. –
다른 수표도 포함시킬 수 있습니다. 다른 get 매개 변수가 없다면 :'[^ & "]' – Loamhoof