2010-06-22 2 views
0

관심있는 부분은 HTML 입력을 허용하고 태그를 그대로 유지하면서 태그 내부의 모든 속성을 제거하는 정규 표현식입니다. 예를 들어 내가이 원하는 ... 태그에서 속성을 제거하는 정규 표현식

<p class="test" id="TestParagraph">This is some test text right here.</p> 

은 어떤 도움이 많이 주시면 감사하겠습니다

<p>This is some test text right here.</p> 

...이 될합니다.

+7

[이 답변] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)을 참조하십시오. 그런 다음 정규 표현식이 작동한다고 생각하는 대신 실제 HTML 구문 분석기를 사용하십시오. –

+0

XML 요소의 속성을 제거하기 만하면됩니다. 나는 틀린 것 같지만 충분히 간단 해 보입니다. – Greg

+6

정규 언어를 사용하지 않는 작업에 정규식을 사용하려는 이유가 무엇입니까? 마치 망치로 나사를 조이는 것과 같습니다. 나는 그것이 "done"의 어떤 정의를 위해 행해질 수 있다고 확신하지만 꽤 좋지는 않을 것이며 그 결과는 강력하지 않을 것이다. –

답변

5

정말 이것에 대해 regex를 사용하고 싶지 않습니다. HTML은 regular language이 아니므로 실제 텍스트가 태그를 모방하지 못하도록 보장 할 수는 없습니다. 당신이 생각해내는 표현이 무엇이든, 항상 그것을 깨뜨리는 경우가있을 것입니다.

내가해야 할 모든 HTML 조작에 Html Agility Pack을 사용하시기 바랍니다.

+0

"실제 텍스트가 태그를 모방하지 않을 것이라고 보장 할 수는 없습니까?" – Greg

+0

내용에 "id = something"형식의 텍스트가 포함되어있을 수 있으며 정규 표현식을 사용하지 못할 수도 있습니다. 또는 HTML 주석 태그를 포함 할 수도 있습니다. 궁극적으로 99.99 %의 시간 동안 작동 할 수있는 정규 표현식을 만들 수는 있지만 정확한 접근 방식이 아니라고 주장 할 것입니다. – womp

+0

약간의 연구를했는데, 오늘 아침에 HTML 민첩 팩을 다운로드하여 입력 해 주셔서 감사합니다. – huffmaster

2

HTML은 regular language이 아니므로 정규식으로 구문 분석 할 때 문제가 발생합니다. Greg가 위에서 언급 한 것처럼 HTML 파서를보고이 작업을 수행 할 수 있습니다.

즐기십시오!

+0

점 연결 정규 언어의 +1 - 정규 표현 – azatoth

1

사과에 대해 not answering the question.

당신은 물론

<$1> 

로 대체이

<(\S+)[^>]+> 

시작할 수 있습니다,이 입력이 스크립트 나 CDATA 섹션, 또는 모든 종류의 경우가 포함되어있는 경우 침입하기 쉬운 것입니다. 그러나 입력 된 내용에 충분히 근접 할 수 있습니다.

+1

OP가 잘못된 것을하기로 결정했다면, 적어도 그것보다 더 나은 표현을 사용해야합니다 ... 원하지 않는 이스케이프를 제거하고 태그 이름을 단순화하면 '<(\S+)[^>] +>'이 훨씬 더 읽기 쉽습니다. –

+0

@Peter, 좋습니다. – harpo