2010-04-11 6 views
0

최근에 Java 정규 표현식을 공부하기 시작했고 실제로 몇 가지 상호 작용하는 작업을 발견했습니다. 예를 들어 이제 "제품 이름", "제품 설명"및 "이 제품의 판매자"를 찾아야합니다 . 다음 HTML 코드의 (I 코드의 큰 chunck에 대한 죄송하지만 매우 간단)Java 정규 표현식에 대한 초보자 질문

<td class="sr-check"> 
<input type="checkbox" name="cptitle" value="678560038" /></td> 
<td class="sr-image" style="width: 80px;"><a href="/Nikon-D300S-12-3-678560038/prices-html"  class="strictRule" rel="nofollow"><img src="http://img01.static-nextag.com/image/Nikon-D300S-12-3-MP-Digital-SLR-Camera-Body-Black/0/000/006/789/461/678946110.jpg" alt="Nikon D300S 12.3 MP Digital SLR Camera Body - Black" class="imageLink strictRule" height="75" width="75" id="opILink_0" title="Nikon Digital Cameras - Nikon D300S 12.3 MP Digital SLR Camera Body - Black" /></a><div class="breaker">&nbsp;</div></td> 
<td class="sr-info"> 
<div class="sr-info"> 
<a id="opPNLink_0" class="underline" style="font-size:16px" href="/Nikon-D300S-12-3-678560038 /prices-html" >Nikon D300S 12.3 MP <b>Digital</b> SLR <b>Camera</b> Body - Black</a> <div class="sr-subinfo"> 
<div class="sr-info-description">SLR - 13.1MP, 12.3MP - 1x Optical Zoom - CompactFlash, SD/MMC Memory Card - 3in.</div> 
<div class="rating"> 
<img src="http://img01.static-nextag.com/imagefiles/stars/stars4_10px.gif" alt="4/5 stars" title="4/5 stars" /> (92 user ratings)</div> 
<div style="clear: both;"> 
<!-- nxtginc=nextag.api.ServerInclude$JSPIncludeWriter(/buyer/ATLSSI.jsp?ptid=678560038&dts=y) --> 
<a id="_atl_0" style="" href="http://www.nextag.com/serv/main/buyer/MyPDir.jsp?list=_transCookieList&amp;cmd=add&amp;ptitle=678560038" rel="nofollow">+ Add to Shopping List</a> &nbsp;|&nbsp; 
<!-- endnxtginc --> 
<a rel="nofollow" id="mltLink_0" class="mlt-link" href="/Digital-Cameras--zz500001z2z678560038zB2dgz5---html">See More Like This</a> 
</div> 
<div id="fsLink_0" class="featuredSeller"> 
<a rel="nofollow" class="featuredSeller" id="opFSLink_0_0" href="/norob/PtitleSeller.jsp?chnl=main&amp;tag=785646073amp;ctx=x%2BN%2Fs9zy56l4u8RXCzALE1jeLesDMzeK09rPQEdK3Yjx395ZzX9cMh9N5JAxjk7xPqF9hjk2ztM5IRXU5nspLubIXYaVzI%2B%2Fg7h1Qz58TzgvrWuNawV8qEIqqSmClArWMq6mpzNRuSlgg2xCXYObNnaIH00iKSUmBawDRvecwbCpAxhXgXoLEiEinTwr3EipComdzxL9UHFYTLoWUToUB5SRSsolQmEJ3mgnnvu83%2FC8W34TGpN9mJo%2BnyAeTkt4&amp;ptitle=678560038" target="_blank" >Thundercameras</a>:$1,289 &nbsp; 
<a rel="nofollow" class="featuredSeller" id="opFSLink_0_1" href="/norob/PtitleSeller.jsp?chnl=main&amp;tag=797076595&amp;ctx=x%2BN%2Fs9zy56l4u8RXCzALE1jeLesDMzeK09rPQEdK3Yjx395ZzX9cMh9N5JAxjk7xPqF9hjk2ztM5IRXU5nspLubIXYaVzI%2B%2Fg7h1Qz58TzgvrWuNawV8qEIqqSmClArWMq6mpzNRuSlgg2xCXYObNrcWLhL%2BhryuAGhXNhYSPE%2BpAxhXgXoLEiEinTwr3EipComdzxL9UHFYTLoWUToUB5SRSsolQmEJ3mgnnvu83%2FC8W34TGpN9mJo%2BnyAeTkt4&amp;ptitle=678560038" target="_blank" >PhotoVideoSuperStore</a>:$1,269 &nbsp; 
<a rel="nofollow" class="featuredSeller" id="opFSLink_0_2" href="/norob/PtitleSeller.jsp?chnl=main&amp;tag=803555293&amp;ctx=x%2BN%2Fs9zy56l4u8RXCzALE1jeLesDMzeK09rPQEdK3Yjx395ZzX9cMh9N5JAxjk7xPqF9hjk2ztM5IRXU5nspLubIXYaVzI%2B%2Fg7h1Qz58TzgvrWuNawV8qEIqqSmClArWMq6mpzNRuSlgg2xCXYObNt06qcvLJ5UQz7S3zKd4urWpAxhXgXoLEiEinTwr3EipComdzxL9UHFYTLoWUToUB5SRSsolQmEJ3mgnnvu83%2FC8W34TGpN9mJo%2BnyAeTkt4&amp;ptitle=678560038" target="_blank" >Digitalelect</a>:$1,279 &nbsp;</div> 

내가 생각하는 것 :

(1) <td class="sr-image > 태그에서 제품 이름을 파고 , 정규 표현식 사용

exp ="<td><span\\s+class=\"sr-image\"[^>]*>" 
      + ".*?</span><a href=\"" 
      + "([^\"]+)"  
      + "\"[^>]*>"  
      + "([^<]+)" + "</a>.*?</td>"; 

(2) <div class="sr-info-description"> 태그에서 제품 정보를 찾으십시오.

exp = "<div class="sr-info-description"> [^>]*>" 

(3) <div id="fsLink_0" class="featuredSeller"> 태그에서 판매의 이름을 파고. 내가 잘못된 트랙에서 오전 또는 내 일반 expressiona 잘못이 있다면 당신이 저를 해결 할 수 있다면 난 그냥 자바 정규 표현식을 사용하여 learing 시작하고

exp = "<div id="fslink_0" class="featuredSeller[^>]*>" 
      + ".*?</span><a rel=\"" 
      + "([^\"]+)"  
      + "\"[^>]*>"  
      + "([^<]+)" + "</a>.*?</td>"; 

, 나는 감사하겠습니다. 고마워.

+8

HTML 구문 분석을위한 정규식을 피하십시오. –

+5

이 작업에는 정규식을 사용하지 말고 (x) html 파서를 사용하는 것이 좋습니다. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

Thanks Phild를 참조하십시오. 나는 당신의 조언을 원할 것입니다. 태그가 간단하기 때문에 제품 정보를 얻는 것에 관한 두 번째 쿼리에 대해서만 궁금합니다. – Kevin

답변

1

앞서 언급했듯이 파서를 사용하여 html 입력을 해석해야합니다.

그러나 나는 그것이 모두 한 줄이 그리고있는 경우에 당신은 절대적으로 필요 (자체에는 태그가 포함 없다고 가정

<div class="sr-info-description">SLR - 13.1MP, 12.3MP - 1x Optical Zoom - CompactFlash, SD/MMC Memory Card - 3in.</div> 

같은 텍스트 라인에서 제품 정보를 추출하는 정규식에 대한 질문에 대답 할

<div class="sr-info-description">([^<]*)</div> 

는 귀하의 의견에, 당신의 표현을 find()을 정규를 구축하고 group(1)는 div 태그 내의 텍스트를 포함 등)는 HTML 파서를 사용하려면 정규 표현식 (보일 것입니다을하면서에는 div 태그를 포함한 일치하는 영역이 포함됩니다.

관련 문제