2011-10-05 3 views
0

http 응답 본문에서 오는 아래 텍스트의 페이지 id 값을 가져 오려면 패턴 일치 프로그램이 필요합니다.Java Matcher 클래스

<meta name="ajs-page-id" content="262250"> 

저는 이후에 항상 responsebody에서 생성되는이 줄에서 내용 값을 가져옵니다.

답변

2
Pattern pat = Pattern.compile("<meta\\sname=\"ajs-page-id\"\\scontent=\"(\\d+)\">"); 

분명히 매우 문자적인 패턴이지만 그룹 (1)은 번호를 문자열로 반환해야합니다. 테스트하지 않았습니다.

+0

나는 등 몸 응답 추가 할 수 있습니다, 그에게 기회를주지 : 경기 = pattern.matcher (bodyResponse를) 또는 내가 선으로 그것을 깰해야합니까? – user979587

+0

은 아마'\\ s +'를 사용해야합니다. 또한 속성이이 순서대로 표시된다는 보장이 없으며 대부분 그렇게 할 수도 있습니다. – MeBigFatGuy

+0

@ user979587 텍스트 본문 전체에서 실행할 수 있어야합니다. matcher.find()에 대한 반복 된 호출은 모든 발생을 순차적으로 실행합니다. – gnomed

1

jsoup과 같은 HTML 파서를 사용하여 파트를 구문 분석하고 검색하십시오. 이것을 위해 정규식을 사용하지 않아야합니다. 예를 들어,

,

String htmlStr = "<meta name=\"ajs-page-id\" content=\"262250\">"; 
Document doc = Jsoup.parse(htmlStr); 
Element meta = doc.select("meta[name=ajs-page-id]").first(); 
if (meta != null) 
{ 
    System.out.println(meta.attr("content")); 
} 
+0

거의 확실하게 안전합니다. 그러나 입력 텍스트로 무엇을 할 계획인지에 따라 정규식은 거의 확실히 빠르며 메모리에 적은 개체를 만듭니다. 또한 입력 텍스트의 도메인을 잘 알고 있으면 잠재적으로 훨씬 안전하지 않을 수 있습니다. 소프트웨어 개발의 모든 것과 마찬가지입니다. 일반적으로 안전을 위해 메모리와 속도를 희생하는 것은 괜찮지 만, 모든 사람에게 해당되는 것은 아닙니다 (즉, 내가 일하는 회사는 성능에 엄청난 관심이 있습니다). – gnomed

+1

글쎄, 거기에 더 이상 (지금 삭제 된) "대답"에서 작동하지 않는다고 주장했기 때문에 당신이 Asker에서 놓친 것 같습니다. 그 태그가 작동하지 않는 이유와 왜 파싱되어야하는지에 대한 이유는 태그가 그 패턴에 머물러 있지 않기 때문입니다. 나는 결코 변하지 않을 것이라는 것을 안다면 정규 표현식으로 되돌릴 수도 있지만 동의하지 않는 것이 최선의 선택 일 것이라고 나는 동의한다. –