2011-06-15 9 views
11

정규식을 사용하여 큰 따옴표 안에 문자열을 가져올 수 있습니까?정규식의 큰 따옴표

<img src="http://yahoo.com/img1.jpg" alt=""> 

내가 외부 문자열 http://yahoo.com/img1.jpg alt=""을 얻으려면 :

나는 다음과 같은 문자열을 가지고있다. 정규 표현식을 사용하여 이것을 어떻게 할 수 있습니까?

+1

.NET? PHP? 러비? – rerun

+0

자바에서 regex 사용 – Ammu

+1

항상 alt 태그도 갖고 싶습니까? – Kaj

답변

10

내가 원하는 이유를 모르겠다. alt 태그도 있지만이 정규식은 사용자가 원하는 것을 수행합니다. 그룹 1은 url이고 그룹 2는 alt 태그입니다. 나는 아마도 IMG와 SRC 사이에 여러 공백이 될 수 있다면 정규 표현식을 약간 수정 한 것 '='주위에 공백이있을 수있는 경우

Pattern p = Pattern.compile("<img src=\"([^\"]*)\" (alt=\"[^\"]*\")>"); 
Matcher m = 
    p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\"> " + 
    "<img src=\"http://yahoo.com/img2.jpg\" alt=\"\">"); 

while (m.find()) { 
    System.out.println(m.group(1) + " " + m.group(2)); 
} 

출력 :

http://yahoo.com/img1.jpg alt="" 
http://yahoo.com/img2.jpg alt="" 
8

당신은 이런 식으로 작업을 수행 할 수 있습니다

Pattern p = Pattern.compile("<img src=\"(.*?)\".*?>"); 
Matcher m = p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">"); 
if (m.find()) 
    System.out.println(m.group(1)); 

을하지만, 당신이 HTML 일부 라이브러리를 사용하는 것이 구문 분석하는 경우 : 정규식 HTML을 구문 분석하는 것은 좋은 생각이 아니다. 나는 jsoup와 함께 좋은 경험을했다 : 파서는" 이전src=""을 제외한 모든 문자 를 취할 것

String url = ""; 
Pattern p = Pattern.compile("(?<=src=\")[^\"]*(?=\")"); 
Matcher m = p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">"); 
if (m.find()) 
    url = m.group()); 

:이 작업을 수행해야합니다

String fragment = "<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">"; 
Document doc = Jsoup.parseBodyFragment(fragment); 
Element img = doc.select("img").first(); 
String src = img.attr("src"); 
System.out.println(src); 
+0

'>'을 찾을 때 패턴이 너무 욕심입니다. – Kaj

+0

@ Kaj : 감사합니다! 나는 – MarcoS

+0

멋지다, 나는 당신을 투표 할 수있다. – Kaj

2

: 여기 예제

+0

나는 작전에 의해 게시물을 읽는 방법을 모르지만 그의 예제는 그가 alt 태그를 원한다는 것을 보여준다. (왜 그런지 알지 못하고 왜 태그에 alt 태그의 값뿐만 아니라 왜 태그가 필요한지 알지 못합니다.) – Kaj

+0

@Kaj - 알지만, 링크 된 URL *와 'alt' 속성 (xml 표기법의 이름과 값)은 오타처럼 냄새가났다;) –

관련 문제