HTML을 정규식으로 구문 분석하는 것은 10 번째 지옥과 같습니다. 나는 너를 괴롭힌다. tidy
(.NET이 깔끔한 지 확실하지 않음)을 실행 한 다음 XML 파서를 통해 실행하는 것이 좋습니다. 그런 식으로 class
및 lang
과 같은 특정 속성을 추출한 다음 노드에 onDblClick
이라는 새 속성을 추가 할 수 있습니다. 그렇지 않으면
, 순진한 접근 방식 (확실하지 어떤 구문은 .NET에 있지만이 펄에) :
이
$str =~ s/<span\(.*?\)lang=\\"\(.*?\)\\">/<span$1lang=\\"$2\\" onDblClick=\\"window.external.MyFunction($2)\\">/
여기서 중요한 것은 패턴이 일치하는 것입니다 (캡처 포함) :
<span\(.*\)lang=\\"\(.*?\)\\">
이이 \"
의 사이에 아무것도 lang=\"
다음, 아무것도에 의해 <span
다음과 일치, \">
하였다.
교체 패턴은 다음과 같습니다
<span$1lang=\\"$2\\" onDblClick=\\"window.external.MyFunction($2)\\">
이 생성 <span
onDblClick
물건 다음 그것을 캡처 언어 이름 ($2
) 다음 다음 lang
($1
)와 lang=\"
까지 일치하는 모든 것을, 다음 .
저는 .NET에 익숙하지 않으므로 이것을 변환해야합니다. 하지만 너무 다르지 않아야합니다. \(
을 (
(구문에 따라 다름)으로 변경해야 할 수도 있습니다. 또한 .NET에서 역 참조를 처리하는 방법을 잘 모르지만 $1
및 $2
(예 : Java와 유사)이어야합니다.
참고 : 테스트하지 않았습니다!
'span'과'class' 사이에있는 것을 포착 할 필요가 없습니까? * 뭔가 * 있다면? :). 이 예제에서는 단지 공간처럼 보입니다. –
감사합니다 !!! 감사!!! :) – Lai
@Vivin, 공정한 의견 (+1)이긴하지만 상당히 까다로운 요구라고 생각합니다. 따라서 검색 정규 표현식을 "" 대체 문자열을 ""해야합니다. – Lazarus