2009-06-17 1 views
2

맞춤 HTML 태그의 속성을 "잡아야"합니다. 나는 이런 종류의 질문이 여러 번 전에 물어 왔다는 것을 알고 있지만, 정규 표현식은 정말로 내 머리를 망쳐 놓는다. 그리고 나는 그것을 작동시키는 것처럼 보이지 않는다.태그 속성을 제대로 추출하도록이 정규 표현식을 변경하는 방법은 간단해야합니다.

내가 작업에 필요한 XML의 샘플 내가이 경우 nameValue있는 name 속성의 값을 잡을 수 있도록하려면

<!-- <editable name="nameValue"> --> - content goes here - <!-- </editable> -->

입니다. 내가 가진 것은 아래에 나와 있지만 null 값을 반환합니다.

(자바 응용 프로그램을위한 "고 탈출 따라서 \) 내 정규식 문자열 : 나는 따옴표로 속성을 잡기 위해 노력하고
"(.)?<!-- <editable name=(\".*\")?> -->.*<!-- </editable> -->(.)?"

나는 이것이 가장 쉽고 가장 일반적인 패턴 파악 일치하도록. 그럼 그냥 작동하지 않는, 어떤 도움이 내 머리를 유지하는 데 도움이 될 것입니다.

+0

HTML 주석은 이유가 있습니다. 브라우저에 태그를 표시하고 싶지 않습니다. – Ankur

답변

2

을하는 데 도움이

희망은 당신이 당신의 정규식의 시작과 끝에서 (.)?들 필요가 있다고 생각하지 않습니다. 그리고 당신은 단지 얻기를 위해 캡처 그룹에 둘 필요가 컨텐츠를-간다 - 여기 비트 :

이 나를 위해 일한 :

String xml = "RANDOM STUFF<!-- <editable name=\"nameValue\"> --> - content goes here - <!-- </editable> -->RANDOM STUFF"; 
Pattern p = Pattern.compile("<!-- <editable name=(\".*\")?> -->(.*)<!-- </editable> -->"); 
Matcher m = p.matcher(xml); 
if (m.find()) { 
    System.out.println(m.group(2)); 
} else { 
    System.out.println("no match found"); 
} 

이 인쇄 :

- content goes here - 
2

귀하의 검색 greedy입니다. "\<\!-- \<editable name=\"(.*?)\"\> --\>.*?\<\!-- \<\/editable\> --\>"이 (? 추가).이 하나가 중첩 <editable> 요소가 제대로 작동하지 않을 수 있습니다 사용합니다.

구문 검사를 수행하지 않으려는 경우 단순성과 성능을 높이기 위해 "\<\!-- \<editable name=\"(.*?)\"\> --\>" 또는 "\<editable name=\"(.*?)\"\>"과 같이 간단하게 지정할 수 있습니다.

편집

: 내가 자바 스크립트를 사용

Pattern re = Pattern.compile("\\<editable name=\"(.*?)\"\\>"); 
+0

그 중 하나가 작동하지 않습니다. \ for \에있는 \는 무엇입니까 - 왜 탈출하겠습니까? > 문자? – Ankur

+0

그 문자는 정규 표현식에서 특수 문자가 될 수 있기 때문에. ? 그러나 잘못되었습니다. 실제로 자바 문자열에서 백 슬래시도 이스케이프 처리해야합니다. => \\> –

+0

Java 용으로 수정되었습니다. –

2

해야하지만, 가능하면 표현이 아닌 욕심 수 있도록 도움이되지는 모든 문자가 일치하는 대신 일치 사용해야합니다. 비슷한 정규 표현식이 Java와 얼마나 유사한 지 알 수는 없지만 \".*\" 표현을 사용하는 대신 \"[^\"]*\"을 사용해보십시오. 그러면 속성 값 내에서 인용 부호가 아닌 문자가 검색됩니다. 이는 표현식이 속성 값 이상으로 일치 할 수 없음을 의미합니다.

+1

+1 따옴표로 묶지 않은 방식입니다. 참고로, 자바 정규 표현식은 자바 스크립트 풍미가 할 수있는 모든 것을 할 수 있습니다. –

+0

감사합니다. 그래, 예를 들어, 자바 스크립트의 정규 표현식이 일부 영역에서 부족하다는 것을 알고있다. 희망적으로 시간이 지남에 따라 향상 될 것입니다. –

관련 문제