2010-02-20 6 views
0

id와 class의 순서가 중요하지 않은 span 요소를 탐지하려면 정규 표현식이 필요합니다. 자바 정규 표현식에 대한 나의 접근 방식은 정규 expr이 필요합니다. 속성의 순서가 중요하지 않은 html 요소

<span id="321" class="className" > 

<span class="className" id="123"> 

또는

했다 :

클래스의 이름은 ID가 항상 예를 ​​들어 고정 자릿수입니다, 항상 동일
String pattern = "<span class=\"className\" id=\"\\d*\">"; 

하지만 하나의 버전 만 얻을 수 있습니다. 누군가가 도와 줄 수 있습니까?

감사합니다. hansa

+0

정규식 대신 HTML 파서를 사용 해본 적이 있습니까? –

답변

7

HTML을 정규식으로 구문 분석하지 마십시오. HTML은 규칙적이지 않습니다. 다음

<span[^>]*class=\"classname\"[^>]*> 

등과 같은

id=\"(\d+)\" 

가진 첫번째 패턴과 일치하는 태그의 ID를 발굴 :

+0

감사합니다, 나는 당신의 대답에 동의합니다. 그러나 스팬 태그를 제외하고는 다른 HTML 태그가 존재하지 않으며 스팬이 다른 스팬 안에있을 수 없으므로 스팬은 단순히 id가있는 대괄호를 나타냅니다. 어쩌면 나중에 자바 스크립트와 DOM으로 처리합니다. – hansa

0

나는 첫째로 span 태그를 찾는 두 단계 버전을 할 것 HTML에서 정규 표현식을 파싱하는 것은 좋지 않습니다. 그러나 더티 데이터 처리의 경우이 방법을 사용합니다.

+0

고맙습니다. 저는이 솔루션을 사용했고 작동합니다. 자세한 내용은 폴 톰 블린의 답변을 참조하십시오. – hansa

1

이 그것을 수행해야합니다

String r = "<span (?=[^<>]*\\bclass=\"className\")[^<>]*\\bid=\"(\\d+)\"[^<>]*>"; 

룩어는 범위가 모든 문자를 사용하지 않고 원하는 클래스의 것을 확인합니다. 나머지 정규식은 동일한 위치에서 시작하여 id 속성을 검색하고 그 값을 캡처합니다. [^<>]*은 존재할 수있는 다른 속성을 처리하는 동시에 모든 일치가 태그 내에서 발생하도록합니다. (기술적으로 꺽쇠 괄호 이 속성 값에 표시 될 수 있지만 걱정하지 않아도됩니다.)

+0

파서가이 작업에 더 좋습니다. – BalusC

+0

@BalusC : 거기에는 논쟁이 없습니다.하지만 Cthulhu라는 이름을 사용하지 않고도 가능한 경우 정규식 응답을하는 것이 더 도움이된다고 생각합니다. 그렇게하면 작업이 예상되는 OP보다 더 복잡한 이유를 구체적으로 설명 할 수 있습니다. "HTML은 규칙적이지 않습니다."전혀 도움이되지 않습니다. –

+0

"HTML은 규칙적이지 않다"는 것은 컴퓨터 구문 구문 분석과 관련하여 "일반적인"의미를 이해하는 데 도움이됩니다. 어떤 의미인지 이해한다면 (또는 검색하면) 즉시 100 % 정확도로 html을 파싱하는 정규식을 작성할 수 없다는 것을 이해하게 될 것입니다. 정의 상으로는 가능하지 않습니다. –

관련 문제