채택완료

정규식 질문있습니다~!

2020-07-13 (월) 11:22:12 3,589
Copy
$str = '<p><img src="/shop/lib/meditor/../../data/editor/1fdf6438e02eff9a"><br></p>';

위와 같이 <img> 태그안에 있는 src의 링크 부분만 출력을 하고 싶습니다.

형식은 대부분 비슷하나 img 태그는 $str 변수에 무조건 1개만 들어갑니다.

정규식으로 해당 안의 url을 가져오고 싶은데 참고할수있도록 알려주시면 감사하겠습니다.!

답변 4개

채택된 답변
+20 포인트
2020-07-13 (월) 12:13:21

* for beginners. 참고로 추가합니다.

Copy
// 1. HTML 내용 중
$str = '<p><img sor="test" src="/shop/lib/meditor/../../data/editor/1fdf6438e02eff9a"><br></p>';

 

// 2. 필요한 부분
// <img src="/shop/lib/meditor/../../data/editor/1fdf6438e02eff9a">

 

// 3. 패턴 지정
// .*?는 간단하게 뒤쪽의 문자열 전까지의 문자열. *라서 없을 수 있음.
// [^"]는 "가 아닌 문자. + 붙어서 1글자 이상. src 부분만 따로 할당하기 위해 ()로 감싸기.
// <img.*?src="([^"]+)">

 

// 4. 실제 구하기 ... 찾으면 src 내용, 찾지 못하면 빈 문자열.

// 구분자 #로 지정했는데, 패턴에 사용되지 않는 문자로 하면 따로 Escape 처리하지 않아도 되어 편함.

// 예) /<div>.*?<\/div>/ → #<div>.*?</div>#

$img = preg_match('#<img.*?src="([^"]+)">#', $str, $match) ? $match[1] : '';

echo $img; // /shop/lib/meditor/../../data/editor/1fdf6438e02eff9a

많은 분들 댓글 감사합니다.

좋은 하루 보내세요^^

간단하게 한다면 /<img src="(.*)">/ 입니다.

()는 그룹을 의미하고

.*이  ""안에 있는 모든 글자를 의미합니다.

테스트는 https://regex101.com/ 입니다.

진서기님의 정규식은 모든 경우의 수를 넣은 것입니다.

중간에 img와 src사이에 다른 것이 들어가도 동작되게 하는 정규식입니다.

답변을 작성하려면 로그인이 필요합니다.