2011-04-21 4 views
1

안녕하세요, HTML로 단어를 대체하는 데 도움이되는 RegEx를 찾으려고합니다. 문제는 대체하려는 단어가 HTML 태그에도있는 경우 발생합니다.

예 : <img class="TEST">asd TEST asd dsa asd </img>
두 번째 "테스트"만 필요합니다.

RegEx 내가 찾으려면 >[^<]*TEST처럼 보이지만이 정규식은 TEST라는 단어보다 먼저 문자를 사용합니다. TEST라는 단어 만 선택할 수 있습니까? 하지만 다른 조합뿐만 아니라 상상 (나는 "TEST"텍스트가 다른 문자도 포함 할 수있는 즉시 좋은 해결책이라고 생각하지 않는다)RegEx for HTML 바꾸기

+3

참조 http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

이것은 파서를위한 작업입니다. "java html parser"에 대한 검색을 수행하면됩니다. – ridgerunner

답변

1

첫째, XML에 정규 표현식을 사용하는 것은 대개 잘못된 생각입니다. 그러나 매우 단순한 경우에는 특히 최적이 아닌 결과로 살 수 있다면 효과가 있습니다.

그래서, 단지에만 그룹에

뭔가

Pattern replacePattern = Pattern.compile(">[^<]*(TEST)"); 
Matcher matcher = replacePattern.matcher(theString); 
String result = theString.substr(1,matcher.start(1)) + replacement + theString.substr(matcher.end(1)); 

같은 책임의 한계와 법적 고지 그룹의 테스트를 놓고 대체 : 테스트하지있을 수있는 몇 가지 오프 별 것. 그러나 그 개념은 분명해야합니다.

2

우선, 정규식은 html 구문 분석에 좋지 않은 옵션이다. 당신이 사용할 수있는 향상된 html 파서 ..

하지만 정규식을 사용하기를 원한다면 여기에 정규 표현식을 사용하십시오. 말했다되었으며 될 것 같은 자바에 대한

(?<=>.*)TEST(?=.*<) 

, 우리가 사용할 수없는 이유에 대한 자세한 내용은

(?<=>.{0,100000})TEST(?=.{0,100000}<) 

* 또는 + 자바 lookbehind의 정규식, 모든 Regex look-behind without obvious maximum length in Java

+0

나는 전체 HTML을 파싱하지 않는다. 왜냐하면 여리고를 사용하기 때문이다. 나는 단지 몇 마디를 바꾸는 쉬운 방법을 원했다. 나는 당신의 정규식 작업을 질수 ... 난 당신의 솔루션을 좋아 여기 http://myregexp.com/ – rhorvath

+0

을 테스트하지만,이 같은 코드를 작동하지 : '

[줄 바꿈 여기] TEST [여기 바꿈]

' – rhorvath

0

"TEST"가 body 태그 내부와 같은 다른 태그 안에 있거나 html 태그 내부에서 그런 경우는 어떨까요?

+0

어쩌면 내가 잘못 말했다. 내 말은 '<' and '>'입니다. 단어가 태그 <> 안에 있다면 okey입니다, < here> 인 경우 ok가 아닙니다. – rhorvath