2010-08-12 5 views
2

Regex를 잘 모르며 일부 추출 된 페이지 텍스트에서 모든 스크립트 태그를 가져 오려고합니다. 나는 다음 패턴을 시도했다 :Regex를 사용하여 일부 텍스트에서 스크립트 태그를 추출하는 방법은 무엇입니까?

<script.*?>.*?</script> 

그러나 이것은 어떤 코드도 포함하고있는 스크립트 태그를 반환하지 않는 것처럼 보인다. 나는. 그것에서 다음

<script type="text/javascript" src="Scripts/Scipt1.js"></script> 
<script type="text/javascript" src="Scripts/Scipt2.js"></script> 

<script type="text/javascript"> 
    function SomeMethod() 
    { 

    } 
</script> 

거 야 만 다음과 같은 결과를 얻을 :

<script type="text/javascript" src="Scripts/Scipt1.js"></script> 
<script type="text/javascript" src="Scripts/Scipt2.js"></script> 

이 어떻게 3을 반환 할 수 있습니까? (NB. 결과에 외부 스크립트 태그를 유지하고 싶습니다.)

+3

를 사용하여 XML 파서입니다. Regex로 XML을 파싱 할 때마다 신이 새끼 고양이를 죽입니다. – scy

+2

제발 [하지] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454). XML 구문 분석기를 사용하십시오. – Stephen

+2

Regex를 사용하여이 작업을 수행 할 수는 없습니다. HTML은 정규 언어가 아니므로 정규 표현식으로 파싱 할 수 없습니다. HTML 파서가 필요합니다. –

답변

2

.하지 않습니다, 기본, 일치 줄 바꿈에 의해 당신은 단지 한 줄의 결과를 얻을 수 있도록.

RegexOptions.Singleline을 사용하여 문제를 해결하십시오. .의 의미를 개행 문자를 포함한 모든 문자와 일치하도록 변경하므로 여러 줄 일치도 얻을 수 있습니다.

이름으로 혼동하지 마십시오. 또한 전혀 다른 RegexOptions.Multiline과 혼동하지 마십시오 (IntelliSense 툴팁을 읽어보십시오).

+2

이것은 실제로 잘 작동하고 신속하게 내가 원하는 것을 제공합니다. 어쨌든 고양이는 싫어서 Regex를 사용하기 때문에 하나님이 하나를 죽이면 그다지 신경 쓰지 않아요. – GenericTypeTea

+0

예상대로 작동합니다. 감사합니다. – GenericTypeTea

1

HTML Agility Pack을 사용해야합니다. 예를 들어

:

var doc = new HtmlDocument(); 
doc.Parse(source); 

var scripts = doc.DocumentNode.Descendants("script"); 
0

HTML의 품질에 따라 다릅니다.

var scripts = XDocument.Parse(HTMLSTRING).Descendants("SCRIPT"); 

편집 : 전 Xml.Linq 버전 :

XmlDocument xDoc = new XmlDocument(); 
xDoc.Load(HTMLSTRING); 
XmlNodeList scripts = xDoc.SelectNodes("//*/SCRIPT"); 

주, 둘 다 사람들은 검증되지 않은 있습니다 ....

+0

불행히도이 프로젝트에서 C# 2.0을 사용하고 있습니다. 그래도 좋은 해결책이었을 것 같습니다. – GenericTypeTea

+0

XmlDocument 개체를 계속 사용할 수 있습니다. 그것은 단지 한 줄 이상의 코드입니다. –

+0

덧붙여서, 내가 말했듯이, 테스트되지는 않았지만 아이디어를 얻어야합니다. 가장 큰 문제는 HTML이 유효한 XML인지 여부입니다. –

관련 문제