정규식 질문있습니다~!

정규식 질문있습니다~!

QA

정규식 질문있습니다~!

본문


$str = '<p><img src="/shop/lib/meditor/../../data/editor/1fdf6438e02eff9a"><br></p>';

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

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

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

이 질문에 댓글 쓰기 :

답변 4

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


// 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사이에 다른 것이 들어가도 동작되게 하는 정규식입니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 14,899
QA 내용 검색
filter #php ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT