2011-08-20 7 views
3

두 문자열 사이에서 값을 ""찾고 "가져 오겠습니까?"두 문자열 사이의 값을 찾으려면 어떻게합니까?

예 : 그것은 내가 반환 할 값은 "3"이다 </a> 발견하면 그 시작 어디 <a>의 위치를 ​​찾을 수있는 파일을 읽고 있어요 <a>3</a>

, 다음 읽고 중지됩니다. JRE 6

+1

FSVO "work"가 정규 표현식으로 작동합니다. 그러나 HTML/XML 구문 분석 (관련이 있지만 다른)은 적절한 도구 (실제로 강력한 선택기 언어를 지원하는 도구)를 사용하여 실제로 수행해야합니다. –

+0

정확히 일치하는 [태그를 검색 한 다음 태그 사이에 텍스트를 변수로 저장] (http://stackoverflow.com/questions/7093716/searching-for-a-tag-then-saving-text-between-tag- 변수로) –

답변

12

를 사용

당신의 두 가지 옵션은 다음과 같습니다

1) 선호하지만, 잠재적으로 복잡한 :는 XML/HTML 파서를 사용하여 첫 번째 "A"요소 내의 텍스트를 받고. 예 :

Jsoup.parse("<a>3</a>").select("a").first().text(); // => "3" 

2) 쉽게하지만 매우 신뢰할 수 없습니다 : 다음 <a></a> 문자열 사이의 문자를 추출하는 정규 표현식을 사용하여 Jsoup (감사 @의 alpha123)를 사용. 예컨대 : 당신은 정규식을 사용할 수 있습니다

String s = "<a>3</a>"; 
Pattern p = Pattern.compile("<a>(.*?)</a>") 
Matcher m = p.matcher(s); 
if (m.find()) { 
    System.out.println(m.group(1)); // => "3" 
} 
+0

어떻게 쉬운 방법을하겠습니까? – Mario

+2

태그가 중첩되지 않는 한 정규식은 신뢰할 수 있습니다 –

+1

@ratchet freak 아무도 '< a>'을 쓰거나 일부분을 인코딩하지 않는 한 ... 또는 그다지 믿을만하지 않습니다 – Voo

2

는 : 귀하의 의견은 HTML의 경우

try { 
    Pattern regex = Pattern.compile("<a>(.*)</a>"); 
    Matcher regexMatcher = regex.matcher(subjectString); 
    while (regexMatcher.find()) { 
     for (int i = 1; i <= regexMatcher.groupCount(); i++) { 
      // matched text: regexMatcher.group(i) 
      // match start: regexMatcher.start(i) 
      // match end: regexMatcher.end(i) 
     } 
    } 
} catch (PatternSyntaxException ex) { 
    // Syntax error in the regular expression 
} 

그러나, 당신은 정말 HTML 파서를 사용하는 것이 좋습니다.

+0

... 왜 이것을 try 블록에 배치하고 있습니까? –

+0

코드는 [RegexBuddy] (http://www.regexbuddy.com/)에 의해 생성되었지만 구문에 문제가 없다면 (이 경우처럼) 필요하지 않습니다. –

6

Jsoup이 작업을 쉽게 수행 할 수 있습니다.

String title = Jsoup.parse("<a>3</a>").select("a").first().text(); 
+0

+1 Jsoup 예! – maerics

관련 문제