정규식 질문입니다. 특정 태그 사이 내용 추출
본문
//ex
<div class="content_div" id="test">
<div class="content">
<div class="content-style">
<p>내용내용</p>
<div>내용</div>
<p>내용</p>
<div>내요오옹</div>
</div>
</div>
</div>
이런식으로 된 html구조가 있는데 여기서 div.content-style 안의 내용을 추출하고싶습니다(태그포함해서)
div.content-style 안의 내용은 계속 바뀝니다
처음에는
'<div[^>]*class="content-style"[^>]*>(.*?)<\/div>/is'
이런식으로 추출했었지만 해당 태그안에 div태그가 들어가있으면 정상적으로 추출을 못하드라구요... </div>가 내용안에 들어가있어서 그런것같은데 흠 딱 해당 태그 안의 내용(태그포함)만 추출하는 방법이있을까요?
!-->답변 4
1. 정규식에서 ? 제거 '<div[^>]*class="content-style"[^>]*>(.*)<\/div>/is'
이렇게 하면 뒤에 </div> 까지 싹 붙어서 올겁니다.그담에
2. '<div>(.*?)<\/div>/is' 로 매칭해서 검색된 div 만 추출
jquery 쓰면 안 될까요?
$('div.content-style').html()
php에서 해야 한다면
https://simplehtmldom.sourceforge.io/
한번 써 보세요.
* 대충 활용하기
- https://mac-blog.org.ua/regex-for-div-and-it-content/
$html = '//ex
<div class="content_div" id="test">
<div class="content">
<div class="content-style">
<p>내용내용</p>
<div>내용</div>
<p>내용</p>
<div>내요오옹</div>
</div>
</div>
</div>';
preg_match('#<div\s+class="content-style"[^>]*>((?:(?:(?!<div[^>]*>|</div>).)+|<div[^>]*>[\s\S]*?</div>)*)</div>#six', $html, $match);
print_r($match);
/*
Array
(
[0] => <div class="content-style">
<p>내용내용</p>
<div>내용</div>
<p>내용</p>
<div>내요오옹</div>
</div>
[1] =>
<p>내용내용</p>
<div>내용</div>
<p>내용</p>
<div>내요오옹</div>
)
*/
$result = $match[0].'</div>';
// 또는
$result = '<div class="content-style">'.$match[1].'</div>';
안녕하세요? ^-^
말씀하신 환경에서 Python을 사용하실 수 있는지 여부를 모르겠지만,
BeautifulSoup을 활용하여 Python으로 스크립트를 작성해봤네요 :)
from bs4 import BeautifulSoup
html = '''<div class="content_div" id="test">
<div class="content">
<div class="content-style">
<p>내용내용</p>
<div>내용</div>
<p>내용</p>
<div>내요오옹</div>
</div>
</div>
</div>'''
soup = BeautifulSoup(html, 'html5lib')
content = soup.find('div', {'class' : 'content-style'}).children
for c in content:
print(c, end='')
실행결과 :
<p>내용내용</p>
<div>내용</div>
<p>내용</p>
<div>내요오옹</div>
그럼 아무쪼록 문제를 잘 해결하시고, 남은 4월 뜻깊게 잘 마무리하세요~ ^^
!-->
답변을 작성하시기 전에 로그인 해주세요.