2012-02-22 3 views
0

태그 사이의 텍스트를 제거하고 태그를 문자열 배열에 추가하려고합니다. 예를 들어태그 사이의 텍스트 제거 regex

: <이 tag1> < tag2로 제거> 본 </tag2로> </tag1로>

I 라인별로 텍스트 문서의 행을 판독하고, 각 태그 개구를 추가하거나 어레이로 폐쇄하고,없는 사이의 텍스트하지만 난 문제가 있습니다.

String [] tags = text.nextLine(). split (""); 하지만 정규 표현식에 배열 [tag1, tag2,/tag2,/tag1]이 있어야하는지 확실하지 않습니다.

고마워요!

String[] tags = text.nextLine().split("(?:^|>)[^<]*(?:<|$)"); 

을하지만 실제 XML 파서를 사용하는 것이 아마 더 안전 :

답변

2

이를 작성할 수 있습니다. 댓글 <!-- ... --> 또는 처리 지침 <? ... ?> 또는 기타 등등이 있거나 태그 중 하나에 > (예 : <span title='12 > 11'>)이 포함되거나 다른 여러 가지 경우에는 위의 사항이 잘못 될 수 있습니다. Regexes는 XML 구문 분석을위한 훌륭한 도구는 아닙니다. 빈 첫 번째 요소는 첫 번째 태그 앞에 모든 것을 제거하는 전처리 약간의 작업을 수행 할 수 있습니다 않도록하려면을하고 그에 따라 split을 조정 :


편집

추가 할

String[] tags = text.nextLine().replaceFirst("^[^<]*<?").split(">[^<]*(?:<|$)"); 

(참고 : text.nextLine()에 태그가 전혀 포함되어 있지 않으면 빈 요소가 하나만있는 배열이됩니다.이 부분을 제거하려면 위의 두 번째 단계 (

)를 사용하면됩니다.
if(tags.size == 1 && tags[0].isEmpty()) 
    tags = new String[0]; 

+0

이 할당의 요점은 스택을 사용하여 파일의 유효성을 검사하기 위해 자체 XML 파서를 만드는 것입니다. 위의 표현식은 tags [0]이 항상 ""임을 제외하고 작동합니다. 첫 번째 빈 요소를 제거 할 수있는 것이 있습니까? – Steve

+0

@ 스티브 : 이에 대한 답변을 업데이트했습니다. – ruakh

1

XML은 정규 언어가 아니므로 정규 표현식만으로는 구문 분석 할 수 없습니다. 그것은 기본적인 컴퓨터 과학입니다. 작업에 잘못된 도구를 사용하고 있습니다.

나는 이것이 학생 운동이며, 학생들은 때로는 험머리로 너트를 부는 등의 과제를 맡는다는 것을 알고 있지만, 컴퓨터 전문가의 반응은 여전히 ​​그렇게 할 수있는 방법이 아니어야합니다.

관련 문제