개발! 딱 깔끔하고 센스있게!

php 크롤링 또는 파싱 함수, 정규식 모음 본문

PHP 메모

php 크롤링 또는 파싱 함수, 정규식 모음

렉사이 2018. 10. 25. 12:20


크롤링 또는 파싱 함수, 정규식 모음


 이미지만 추출하는 정규식
 preg_match_all("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i", $contents, $matches);


 특정 엘리멘트 밑에 추출 정규식
 preg_match('/<div id="my2">(.*?)<\/div>/is', $contents, $html);
 preg_match("/\<span id=\"moonseller\"\>[^>]\<\/span\>/", $contents, $html);


 style 태그 제거 정규식
 $str=preg_replace("!<style(.*?)<\/style>!is","",$str);


 특정 태그 제거 정규식
 $contents = preg_replace("/<a[^>]*>/i", '', $contents);
 $contents = preg_replace("/<\/a>/i", '', $contents);




텍스트 사이의 문자열을 배열로 반환 함수
# [splitBetweenStr 텍스트 사이의 문자열을 배열로 반환]
# @param  [string] $str [전체 문자열]
# @param  [string] $startWord         [찾을 시작 문자열]
# @param  [string] $endWord [찾을 종료 문자열]
# @return [array] [텍스트 사이의 문자열 배열]
#
# ex) splitBetweenStr('<br>hi</br><b>test</b><br>graceful_light</br>', '<br>', '</br>')
# => ['hi', 'graceful_light']

function splitBetweenStr($str, $startWord, $endWord)
{
for ($i=0, $len=strlen($str); $i<$len; $i++)
{
$target = substr($str,$i);
$prevStartIdx = strpos($target, $startWord);
$startIdx = $prevStartIdx + strlen($startWord);
$endIdx = strpos(substr($target, $startIdx), $endWord);
if($prevStartIdx===false || $endIdx===false)
{
break;
}
else
{
$betweenStrings[] = substr($target, $startIdx, $endIdx);
$i += $startIdx + $endIdx + strlen($endWord) - 1;
}
}
return $betweenStrings;
}


Comments