2011-09-29 6 views
0

C#에서 RegEx를 디자인 할 때 약간의 문제가 있습니다. 나는에 포함 된 여러 URL이있는 텍스트 문서를 구문 분석해야하고, 나는 그C#에서 정규 표현식 디자인하기

...url=http://www.cnn.com?id=abc,def&system=2&mode=2&quality=ade,url=http://www.bbc.com... 

을 (추출해야^나는, 내용의 그 부분을 것을 보여주기 위해 생략 부호를 추가 한 ... 것입니다 실제로 그러나, 나는 경기

RegEx = (?<IgnoreFirst>[,]url=)(?<Url>[^,]+) 

이 정규식 정지를 종료하는 방법으로 올 수 없다 '= URL'내가 함께 정규식을 시작할 수

시작 부분 부분은 쉽다) 텍스트에있을 처음 쉼표에서 - 'abc'바로 다음에 전체 URL을 반환하지 않음

RegEx = (?<IgnoreFirst>[,]url=)(?<Url>[^,]+)(?<IgnoreSecond>url) 

일치 항목이 처음 쉼표에서 멈추고 찾을 수없는 'url'을 찾는 경우에도 작동하지 않습니다. 내가 한 일을 읽은 것 중 일부는 백 트랙킹 (backtracking) 등의 문제처럼 보입니다. 따라서 누군가가 올바른 정규식으로 나를 도울 수 있다면 멋질 것입니다!

추신. 우리가 그것 위에있는 동안, 내가 & 품질의 직전에 URL을 추출하고 싶다면 어떻게해야합니까?

+1

사이드 노트로, Expresso (무료 앱)를 다운로드하십시오. 그것은 .Net RegEx (JScript RegEx 아님)를 대화 형으로 빌드하고 테스트 할 수있게합니다. –

+0

+1 Expresso. 그 포주. –

답변

2

어떻게 같은 것을 사용에 대한 :

RegEx = url=(?<Url>.+?)(?=,url|$) 

룩어을 마지막에 다음 ",url" 또는 문자열 또는 라인의 끝에서 중 중지 일치하는 강제로.

+0

. +? - 뭐야? 이걸 할거야? – tunafish24

+0

이것은'+'연산자를 욕심이 없도록 만들어서,', url'의 첫 번째 일치를 멈추게합니다. 그렇지 않으면 문자열 끝까지 일치합니다. –