2011-02-22 4 views
3

유무 문자열 strng = "<title>text1</title><title>text2</title>"; 얻는 방법자바는 preg_match 배열

arr[0] = "text1"; 
arr[1] = "text2"; 

내가 이것을 사용하려고하지만 결과에 있고, 당신이 원하는 것처럼 보이는 text1</title><title>text2

Pattern pattern = Pattern.compile("<title>(.*)</title>"); 
Matcher matcher = pattern.matcher(strng); 
matcher.matches(); 
+1

나는 당신이 원하는 것을 정확하게 보여줄 필요가 있다고 생각한다. 각 배열 항목에 숫자가 오는 일련의 문자를 추출하기를 원합니 까? – johusman

+3

안녕하세요, 마크 업을 발견했습니다. ... 왜 당신은 정규식으로 XML을 파싱하고 있습니까? –

+0

오, 이제는 의미가 있습니다! – johusman

답변

8

내가 XML/HTML 파서 is a better alternative in general를 사용하여, 시나리오는 정규식으로 해결하기 위해 간단 동의하지만 :

List<String> titles = new ArrayList<String>(); 
Matcher matcher = Pattern.compile("<title>(.*?)</title>").matcher(strng); 
while(matcher.find()){ 
    titles.add(matcher.group(1)); 
} 

matcher.find() 대신 matcher.matches()의 비 욕심 운영자 .*? 사용합니다.

참조 :

+0

(오페라에서 나는 대답을 대답으로 선택할 수 없습니다 ...) – dobs

+0

Ups ... 오페라 차단 스크립트에 대한 "noads"입니다 ... – dobs

+0

그 정규 표현식은 물론 가장 간단한 옵션입니다. 아, 멋진 링크 제목 (구문 분석 -html-the-cthulhu-way) –

0

하지 배열과 같은 배열 이러한 종류의 작업을 위해 만들어진 HTML/XML 파서.

, 비록 경우 당신은 (위의 라인 등) 제어 정보는 matcher의 반복을 사용할 수의 작은 세트가 있습니다. find() 같은

(?<=\\>)\\w+(?=\\<) 

다시 한 라이너 regex cannot parse HTML/XML 때문에 적절한 파서에 의해 구문 분석 할 수 있어야하는 것보다 더 복잡 아무것도 정규식을 사용하여.

+0

실제로 길이 5의 배열을 제공 하겠지만 그렇지 않습니까? – johusman

+0

그래, 내 대답을 수정 해 보니, 이미 복잡해 졌어. -> HTML/XML 파서 *가 * (* 권장되는 방법. –

0

파서. 위와 같은 작은 스 니펫의 경우 JDOM을 권하고 싶습니다.

XML 또는 HTML 인 경우 XML 및 HTML은 일반 언어가 아니므로 정규 표현식을 사용하고 사용하지 마십시오. 충분한 상태를 유지할 수 없기 때문에 정규 표현식을 사용하여 구문 분석을 성공적으로 수행 할 수 없습니다. 이유에 대한 자세한 내용은 stackoverflow를 검색하십시오. 이것은 끊임없이오고 왜 그것을하지 않는 이유에 대한 많은 정보와 그것이 작동하지 않는 이유가 있습니다.