다음은 최대 내 another question입니다. 내가 찾은 해결책은 내가 처음 던져 놓은 사례가 나타날 때까지 내가 던진 모든 테스트 케이스에서 훌륭하게 작동했습니다.HTML 태그 대체 정규식이 올바르게 작동하지 않습니다.
내 목표는 정규식을 사용하여 부적절한 형식의 태그 속성을 다시 포맷하는 것입니다 (알아 내기는하지만, 어리석은 방법이 아닙니다.
내 기능 :
Public Function ConvertMarkupAttributeQuoteType(ByVal html As String) As String
Dim findTags As String = "</?\w+((\s+\w+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>"
Return Regex.Replace(html, findTags, AddressOf EvaluateTag)
End Function
Private Function EvaluateTag(ByVal match As Match) As String
Dim attributes As String = "\s*=\s*(?:(['""])(?<g1>(?:(?!\1).)*)\1|(?<g1>\S+))"
Return Regex.Replace(match.Value, attributes, "='$2'")
End Function
EvaluateTag
함수의 정규식이 제대로 변환됩니다 HTML
<table border=2 cellpadding='2' cellspacing="1">
<table border='2' cellpadding='2' cellspacing='1'>
에
같은 당신은 내가 속성 값을 강제하고있어 알 수 있습니다 작은 따옴표로 둘러 쌀 수 있습니다. 걱정하지 마십시오. 그것이 깨지는 경우는 마지막으로 속성 값에 주변에 아무것도없는 경우입니다.<table width=100 border=0>
마지막 따옴표와
<table width='100' border='0>'
로 잘못 태그 이외의 대체 정규식 나옵니다. 나는 정규식이 좋지 않다는 것을 전에 고백했습니다. 나는 그저 할 수있는 모든 것을 이해할 시간을 가지지 않았다. 그래서,이 마지막 경우를 처리 할 수 있도록 EvaluateTag
정규식을 조정하는 데 도움이 필요합니다.
감사합니다.
HTML 청소 도구 (다른 질문에 제안 된대로)를 사용하거나 용서할 수있는 DOM으로 HTML을 파싱하고 다시 내보내는 것이 훨씬 나을 것이라고 생각합니다. – TrueWill
[XML과 HTML을 정규식으로 구문 분석하기 어려운 이유에 대한 몇 가지 예를 제공 할 수 있습니까?] (http : // stackoverflow.com/questions/701166/can-you-provide-some-examples-of-the-is-the-is-to-parse-xml-and-a-rege) –
[RegEx match open 태그를 제외한 XHTML 자체 포함 된 태그] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –