preg_match를 사용하여 youtube video id 구문 분석
PHPpreg_match를 사용하여 youtube video id 구문 분석
preg_match를 사용하여 YouTube URL의 동영상 ID를 구문 분석하려고합니다. 이 사이트에서 정규 표현식이 작동하는 것으로 나타났습니다.
(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+
이 그림에 표시된 것처럼 :
내 PHP는 다음과 같습니다,하지만 작동하지 않습니다 (Unknown modifier '['error) ...).
<?
$subject = "http://www.youtube.com/watch?v=z_AbfPXTKms&NR=1";
preg_match("(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+", $subject, $matches);
print "<pre>";
print_r($matches);
print "</pre>";
?>
건배
해결법
-
==============================
1.이 정규식은 내가 찾을 수있는 다양한 URL에서 ID를 가져옵니다 ... 그곳에는 더 많은 것들이 있을지 모르지만, 나는 어디에서든지 그것들의 참조를 찾을 수 없었다. 일치하지 않는 URL이 하나라도 발견되면 URL에 의견을 남기십시오. URL에 맞게 정규식을 업데이트 해 보겠습니다.
이 정규식은 내가 찾을 수있는 다양한 URL에서 ID를 가져옵니다 ... 그곳에는 더 많은 것들이 있을지 모르지만, 나는 어디에서든지 그것들의 참조를 찾을 수 없었다. 일치하지 않는 URL이 하나라도 발견되면 URL에 의견을 남기십시오. URL에 맞게 정규식을 업데이트 해 보겠습니다.
if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match)) { $video_id = $match[1]; }
이 정규식과 일치하는 URL의 샘플은 다음과 같습니다 (무시되는 URL 뒤에 더 많은 콘텐츠가있을 수 있음).
위의 옵션과 동일한 youtube-nocookie.com URL에서도 작동합니다.
또한 embed 코드의 URL에서 ID를 가져옵니다 (iframe 및 object 태그 모두).
-
==============================
2.parse_url 및 parse_str을 사용하여 URL 및 쿼리 문자열을 구문 분석하는 것이 더 좋습니다.
parse_url 및 parse_str을 사용하여 URL 및 쿼리 문자열을 구문 분석하는 것이 더 좋습니다.
$subject = "http://www.youtube.com/watch?v=z_AbfPXTKms&NR=1"; $url = parse_url($subject); parse_str($url['query'], $query); var_dump($query);
-
==============================
3.나는 몇 주 전에 PHP 클래스를 다루어야했는데, 어떤 종류의 문자열과도 일치하는 정규식으로 끝났다 : URL 스키마 유무에 관계없이 하위 도메인 유무에 관계없이 youtube.com URL 문자열, youtu.be URL 문자열 및 모든 종류의 매개 변수 정렬 처리. GitHub에서 확인하거나 아래 코드 블록을 복사하여 붙여 넣기 만하면됩니다.
나는 몇 주 전에 PHP 클래스를 다루어야했는데, 어떤 종류의 문자열과도 일치하는 정규식으로 끝났다 : URL 스키마 유무에 관계없이 하위 도메인 유무에 관계없이 youtube.com URL 문자열, youtu.be URL 문자열 및 모든 종류의 매개 변수 정렬 처리. GitHub에서 확인하거나 아래 코드 블록을 복사하여 붙여 넣기 만하면됩니다.
/** * Check if input string is a valid YouTube URL * and try to extract the YouTube Video ID from it. * @author Stephan Schmitz <eyecatchup@gmail.com> * @param $url string The string that shall be checked. * @return mixed Returns YouTube Video ID, or (boolean) false. */ function parse_yturl($url) { $pattern = '#^(?:https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v=|/watch\?.+&v=))([\w-]{11})(?:.+)?$#x'; preg_match($pattern, $url, $matches); return (isset($matches[1])) ? $matches[1] : false; }
정규식을 설명하기 위해 여기 분할 된 버전이 있습니다.
/** * Check if input string is a valid YouTube URL * and try to extract the YouTube Video ID from it. * @author Stephan Schmitz <eyecatchup@gmail.com> * @param $url string The string that shall be checked. * @return mixed Returns YouTube Video ID, or (boolean) false. */ function parse_yturl($url) { $pattern = '#^(?:https?://)?'; # Optional URL scheme. Either http or https. $pattern .= '(?:www\.)?'; # Optional www subdomain. $pattern .= '(?:'; # Group host alternatives: $pattern .= 'youtu\.be/'; # Either youtu.be, $pattern .= '|youtube\.com'; # or youtube.com $pattern .= '(?:'; # Group path alternatives: $pattern .= '/embed/'; # Either /embed/, $pattern .= '|/v/'; # or /v/, $pattern .= '|/watch\?v='; # or /watch?v=, $pattern .= '|/watch\?.+&v='; # or /watch?other_param&v= $pattern .= ')'; # End path alternatives. $pattern .= ')'; # End host alternatives. $pattern .= '([\w-]{11})'; # 11 characters (Length of Youtube video ids). $pattern .= '(?:.+)?$#x'; # Optional other ending URL parameters. preg_match($pattern, $url, $matches); return (isset($matches[1])) ? $matches[1] : false; }
-
==============================
4.나는 리더 답에서 정규 표현식을 완성했다. 또한 다양한 URL에서 ID를 가져 오지만보다 정확하게 설명합니다.
나는 리더 답에서 정규 표현식을 완성했다. 또한 다양한 URL에서 ID를 가져 오지만보다 정확하게 설명합니다.
if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[\w\-?&!#=,;]+/[\w\-?&!#=/,;]+/|(?:v|e(?:mbed)?)/|[\w\-?&!#=,;]*[?&]v=)|youtu\.be/)([\w-]{11})(?:[^\w-]|\Z)%i', $url, $match)) { $video_id = $match[1]; }
또한 잘못된 ID (11 자 이상)를 올바르게 처리합니다.
http://www.youtube.com/watch?v=0zM3nApSvMgDw3qlxF
-
==============================
5.용도
용도
preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#", $subject, $matches);
-
==============================
6.슬래시 문자에서 벗어나는 것을 잊었습니다. 그래서이 사람이해야 할 일 :
슬래시 문자에서 벗어나는 것을 잊었습니다. 그래서이 사람이해야 할 일 :
preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]\/)[^&\n]+|(?<=v=)[^&\n]+#", $subject, $matches);
-
==============================
7.BBcode (https://developers.google.com/youtube/player_parameters#start)의 시작 매개 변수를 구문 분석합니다.
BBcode (https://developers.google.com/youtube/player_parameters#start)의 시작 매개 변수를 구문 분석합니다.
예 : [yt] http://www.youtube.com/watch?v=G059ou-7wmo#t=58 [/ yt]
PHP 정규식 :
'#\[yt\]https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v=|/ytscreeningroom\?v=|/feeds/api/videos/|/user\S*[^\w\-\s]|\S*[^\w\-\s]))([\w\-]{11})[?=#&+%\w-]*(t=(\d+))?\[/yt\]#Uim'
바꾸다:
'<iframe id="ytplayer" type="text/html" width="639" height="360" src="http://www.youtube.com/embed/$1?rel=0&vq=hd1080&start=$3" frameborder="0" allowfullscreen></iframe>'
-
==============================
8.나는 PHP 오류를 직접적으로 다루는 사람을 보지 못 했으므로 설명하려고 노력할 것이다.
나는 PHP 오류를 직접적으로 다루는 사람을 보지 못 했으므로 설명하려고 노력할 것이다.
"Unknown modifier '['"오류의 원인은 구분 기호로 정규식을 감싸는 것을 잊었 기 때문입니다. PHP는 영숫자가 아닌 공백이 아닌 ASCII 문자 인 한 첫 번째 문자를 구분 기호로 사용합니다. 그래서 정규 표현식에서 :
preg_match("(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+", $subject, $matches);
PHP는 여러분이 (시작 구분자로) 다음을 의미한다고 생각합니다. 다음은 닫는 구분자로 생각합니다. 다음은 패턴 수정 자입니다. 그러나 첫 번째 패턴 수정 자, 첫 번째 다음 문자)가 [. [분명히 유효한 패턴 변경자가 아니기 때문에 당신이하는 오류가 발생합니다.
해결 방법은 단순히 구분 기호로 정규 표현식을 래핑하고 문자 그대로 일치시키려는 정규식 내의 구분 기호를 이스케이프 처리합니다. 구분 기호로 ~를 사용하고 싶습니다. b / c 정규 표현식에서 문자 그대로 ~와 일치시킬 필요는 거의 없습니다.
-
==============================
9.아래 코드를 사용하십시오.
아래 코드를 사용하십시오.
$url = "" // here is url of youtube video $pattern = getPatternFromUrl($url); //this will retun video id function getPatternFromUrl($url) { $url = $url.'&'; $pattern = '/v=(.+?)&+/'; preg_match($pattern, $url, $matches); //echo $matches[1]; die; return ($matches[1]); }
-
==============================
10.이것은 나를 위해 일했다.
이것은 나를 위해 일했다.
$yout_url='http://www.youtube.com/watch?v=yxYjeNZvICk&blabla=blabla'; $videoid = preg_replace("#[&\?].+$#", "", preg_replace("#http://(?:www\.)?youtu\.?be(?:\.com)?/(embed/|watch\?v=|\?v=|v/|e/|.+/|watch.*v=|)#i", "", $yout_url));
from https://stackoverflow.com/questions/2936467/parse-youtube-video-id-using-preg-match by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP : 원래의 문자 집합을 모른 채 모든 문자열을 UTF-8로 변환하거나 적어도 시도하십시오. (0) | 2018.09.13 |
---|---|
C #에서 문자열에서 함수 호출 (0) | 2018.09.13 |
외부 웹 사이트에서 제목 및 메타 태그 얻기 (0) | 2018.09.13 |
cURL 오류 60 : SSL 인증서 : 로컬 발급자 인증서를 가져올 수 없습니다. (0) | 2018.09.13 |
OpenCart 전문가가되는 방법? (0) | 2018.09.13 |