Warning: Undefined array key "mobile_dir" in /home/kagla/new-sir/old/common.php on line 315
정규식 질문입니다. 특정 태그 사이 내용 추출

정규식 질문입니다. 특정 태그 사이 내용 추출

정규식 질문입니다. 특정 태그 사이 내용 추출

QA

정규식 질문입니다. 특정 태그 사이 내용 추출

답변 4

본문


//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월 뜻깊게 잘 마무리하세요~ ^^

 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 129,406
© SIRSOFT
현재 페이지 제일 처음으로