2010-12-05 3 views
0

저는 Processing Sketch에서 HTML 파일을 구문 분석하려고하는 시작 프로그래머입니다. (덧붙여 말하면, Processing을 모른다면 Java로 컴파일되고 같은 정규식 함수를 사용합니다). SimpleML을 사용하여 HTML 파일을 단일 문자열로 올바르게 캡처했습니다. 내가 캡처하기 위해 노력하고있어 데이터는 테이블에서,과 같이 제공 :처리 스케치의 정규식에 대한 도움이 필요하십니까?

<th>Name</th> 
    <th>John F. Kennedy</th> 
    <th>Lyndon Johnson</th> 
    <th>Richard Nixon</th> 

내가 ("이름을"포기) 배열에 후보자의 이름을 구문 분석합니다.

그래서 내가 먼저 전체 목록을 반환
candidates = match(rawString,"<th>.*</th>"); 

을 시도했다.

그럼 내가 말했다 단지

<th>Name</th> 

프로세싱은 문서를 반환

candidates = match(rawString,"<th>.{1,50}</th>"); 

을 시도 :

정규 표현식에서 (괄호 세트로 지정) 그룹이있는 경우

, 각 내용이 배열에 반환됩니다. 정규 표현식 일치의 요소 [0]은 일치하는 전체 문자열을 반환하고 일치 그룹은 요소 [1] (첫 번째 그룹은 [1], 두 번째 [2] 등)에서 시작합니다.

그래서 지금은 같은 그룹과 한정사의 다양한 조합을 시도했습니다 :

candidates = match(rawString,"(<th>.{1,50}</th>)*"); 

그러나 아무것도 작동하지 않기 때문에, 나는받지 못했습니다 몇 가지 개념적인 부분이 있어야합니다. 이게 쉬운 것 같군, 그렇지?

+0

좋아 방지 정규식 - 및 - HTML 군중 –

답변

1

정규식을 사용하여 HTML을 구문 분석하는 것은 일반적으로 좋은 방법은 아니지만 여기에서 이해할 수 있습니다.

너의 문제는 그 .*이 탐욕스러워하는 것처럼 보입니다. 이자형. 가능한 한 많은 문자 수를 입력하면 문자열의 맨 처음 <th>에서 마지막으로 </th>까지를 모두 일치시킵니다.

게으르다. 이자형. 한정 기호를 가능한 한 적게 말하는 것이 하나의 해결책입니다.

<th>.*?</th> 

가능성이 높습니다.

가 더 안정적이고 비트 최소 속도 :

<th>[^<>]*</th> 

[^<>]은 "꺾쇠 괄호를 제외한 모든 문자"를 의미 :이 예를 들어, 일치 할 수 정확히 어떤 엔진을 말해.

중첩 된 구조를 정규식과 일치 시키려면 문제가 발생합니다. 현대적인 정규 표현식에서 할 수 있지만 옳은 일을하는 것은 매우 어렵습니다. 믹스에 HTML 주석과 문자열을 추가하면 (일치하는 바로 분리 문자가 포함될 수 있음) 상처를 입을 수 있습니다.

+0

에 대한 보조기, 그래서 나는 + HTML = 문제 정규식 커뮤니티의 감각을 얻고있다. 그렇다면 더 좋은 방법은 무엇일까요? – James

1

표현식을 여러 번 입력해야하는 경우 matchAll 메서드가 필요합니다. match은 패턴이 한 번 일치 할 것으로 예상하므로 첫 번째 발견 된 결과 만 반환합니다.

http://www.processing.org/reference/matchAll_.html

+0

이것은 James가 직면하고있는 더 중요한 문제인 것으로 보입니다. –

관련 문제