2013-04-23 2 views
-1

다음 텍스트가 있고 src = 뒤에 나오는 'canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8 % 40group.calendar.google.com'을 얻고 싶습니다.PHP로 텍스트의 일부를 추출하는 방법

REGEX는 방법입니까?

$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>'; 

미리 감사드립니다.

답변

2

정규식을 사용하십시오. 정복을 나누

$src = preg_replace('(.*?(?<==)([^&"]+).*)i', '\\1', $text); 

그러나 내가 같은 방법으로을 다음 힌트를 줄 것이다 :

preg_match("/\\?src=([^&\"]+)/i", $text, $results) 
var_dump($results) 
+0

그가 원하는 것을 얻지 못할 것입니다. – Loamhoof

+0

@Loamhoof, 정정 됨, 감사합니다. –

+1

다른 수표도 포함시킬 수 있습니다. 다른 get 매개 변수가 없다면 :'[^ & "]' – Loamhoof

1

정규식은 방법 아마이다. 문제를 작은 문제로 나누고 단계적으로 전반적인 문제를 해결하십시오. 이것은 많은 문제에 적용됩니다. 예를 들어 :

  • 먼저 다음 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 요소를 이해하는 이점이있다. 위치가 변경 되더라도 특정 요소 및 특성을 찾을 수 있습니다.

관련 문제