2014-07-18 2 views
-1

Java RegEx를 사용하여 HTML 페이지에서 데이터를 구문 분석하려고하지만 많은 행운이 없습니다. 데이터는 동적이며 종종 공백, 탭, 줄 바꿈 등의 인스턴스가 0 개에서 여러 개까지 포함됩니다. 또한, 안타 수에 따라 구문 분석하는 문자열의 구조가 변경 될 수 있습니다.Regex Lookahead & Lookbehind with Java

<div class="center">Showing 25 of 2,343,098 (search took 1.245 seconds)</div> 

그것은 또한 다음과 같이 할 수 그러나 : 여기에 깨끗한 형식의 샘플입니다

<div class="center">Showing 2343098 (search took 1.245 seconds)</div> 

또는

<div class="center"> 

    Showing   125 

of 2,343,098 




(search took 1.245 seconds)</div> 

내가 구문 분석하려고 해요 것은이 2,343,098하지만, 페이지가 HTML이기 때문에 "표시 중"또는 "검색 중"을 검색해야합니다. 공백, 탭 및 새 줄이 나를 트립하고 lookbhead를 사용하려고했습니다. & lookbehind하지만 o 멀리 운. 다음은 내가 시도한 몇 가지 패턴입니다.

String pattern1 = "Showing [0-9]*\\S"; // not useful 
String pattern2 = "[[\\d,+\\.?\\d+]*[\\s*\\n]\\(search took"; //fails 
String pattern3 = "(/i)(Showing)(.+?)(\\(search took)"; //fails 
String pattern4 = "([\\s\\S]*)\\(search took"; //fails 
String pattern5 = "(?s)[\\d].*?(?=\\(search took)"; //close...but fails 

Pattern pattern = Pattern.compile(pattern5); 
Matcher matcher = pattern.matcher(text); // text = the string I'm parsing 
while(matcher.find()) { 
    System.out.println(matcher.group(0)); 
} 
+2

"나는 노력하고 있어요 Java RegEx "를 사용하여 HTML 페이지에서 데이터를 구문 분석하지 않습니다. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags. '[..]'과'(..)'의 차이를 아십니까? – Pshemo

+0

* html 파서를 사용해야하는 이유가 그리 많지 않습니다. – A4L

+0

와우, 정직하게 정규식을 사용하여 html 구문 분석에 대해 어떻게 생각하세요? 내가 다시 문구하자. "내가 필요로하는 큰 긴 끈을 가지고있다."그리고 그것은 열리고 닫는 carots의 묶음을 포함한다! – Pigasus

답변

1

HTML은 정규 언어가 아니며 정규 표현식을 사용하여 정확하게 구문 분석 할 수 없습니다. Regex 기반 솔루션은 마크 업 형식이 미래에 변경 될 때 중단 될 가능성이 있지만 파서 기반 솔루션이 더 정확할 것입니다. 이 일회성 작업 인 경우

그러나, 다음과 같은 정규 표현식 멀리 얻을 수 있습니다 :

Showing\s+(?:\d+\s+of\s+)?([\d,.]+)\s+\(search 

Demo

+0

감사합니다! 그것은 일회성 직업이고 # Pshemo의 포스트를 고려할 때 나는 분명해야한다. – Pigasus

+0

끝에 \ b를 추가하면 더 정확하게 나타납니다. +1 – Braj

0

예제는 제안

"Showing\\s+\\d+\\s+(of\\s+[\\d,.]+\\s+)?\\(search" 
+0

"N"이없는 경우에도 "검색 중 ... (검색 ...)"을 감지할지 여부를 묻는 질문에 답장하지 않습니다. – laune