큰 HTML 블록에서 검색을 수행하고 바꿀 필요가 있습니다. 나는 HTML 태그 (URL과 같은)의 일부인 것을 바꾸고 싶지 않습니다. 또한 HTML 태그의 바깥쪽에 URL을 바꾸고 싶지 않습니다.정규식 대신 html 태그 내에서 또는 URL의 일부로 string1을 string2로 바꿉니다 (HTML 외부)
(?!([^<]+)?>)word
그래서, 유일한 : 정규식 친구도이 같은 일치하는 것을 말한다 동안
word(?!([^<]+)?>)
: 나는 HTML 내부에없는 단어 (src)을 일치시키기위한 부분적인 해결책을
(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]
나는이 가능한 경우 확실하지 오전, 내 의도가에 존재하는 URL을 유지하는 것입니다 같은 - 그 단어를 확인 할 일은 남은 것은 URL과 같은 문자열의 일부가 아닙니다 검색을 허용하고 무엇에 대한 작업을 대체하면서 텍스트, 내용의 HTML의 일부입니다 :
개 일치 효율성
<h1>DOG</h1> -> <h1>CAT</h1>
<h1 class='DOG'>DOG</h1> -> <h1 class='DOG'>CAT</h1>
<p class='DOG'>DOG: http://www.DOG.com/DOGfood.html DOGfood is delicious.</p> -> <p class='DOG'>CAT: http://www.DOG.com/DOGfood.html CATfood is delicious.</p>
보너스 포인트 아래 그림과 같이 CAT로 대체 할 이상적인 솔루션 , 나는 거의 끝내고있다. 아닌 태그에 "개"를 일치에 관해서는
HTML 규칙은 매우 복잡 할 수 있으며 HTML 콘텐츠 작성을 제어하지 않으면 규칙이 적용되지 않을 수 있습니다. 얼마나 많은 사이트가 W3C 유효성 검사를 통과 할 것임을 알고 있습니까? 정규식 대신 DOM 또는 다른 HTML 파서를 사용 해본 적이 있습니까? – TrueWill
나는 Tidy를 실행하여 일이 처음 유효하다는 것을 확인하고, 가장 우아한 코드는 아니지만 98 % 유효 할 것입니다. DOM을 사용하면 IMHO가 과도하게 사용됩니다. 해답은 음수 어설 션과 문자열 앞에없는 다른 어설 션을 조합 한 것으로 보입니다. (https?| [-A-Z0-9 + & @ #/%? = ~ _ | $! :,]; )/% = ~ _ | $] 일종의 ... 생각해 보니 거의 대답은 ... –
나는이 주장을하는 유일한 사람이 아닙니다. http://oubliette.alpha-geek.com/2003/12/31/do_not_do_not_parse_html_with_regexs를 참조하십시오. – TrueWill