2
我想解析文件中的URL。我的正則表達式正在工作80%的時間,但我需要修改它的例外情況。它開始變得複雜了,我想知道如何爲這個輸入文件編寫一個很好且乾淨的正則表達式來獲得一個組中的主機,並在一秒之內獲得URI部分。C#正則表達式優化
例如:http://stackoverflow.com/index.php
其中stackoverflow.com
是主機,/index.php
是URI。
輸入文件:
//cdn.sstatic.net/stackoverflow/img/favicon.ico
//cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png
/opensearch.xml
/
#
http://www.stackoverflow.com
http://www.stackoverflow.com/
http://stackoverflow.com/
http://careers.stackoverflow.com
aaa#aaa.com
aaa.com#aaa
aaa#aaa
#aaa
#
fakedomain/index.php
fakedomain.com/index.php
fakedomain.com/
/fakedomain.com/
/index.html/
index.html
正則表達式:
(?:.*?//)?(.*?)(/.*|$)
結果:
1 : //cdn.sstatic.net/stackoverflow/img/favicon.ico has 2 groups:
cdn.sstatic.net
/stackoverflow/img/favicon.ico
2 : //cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png has 2 groups:
cdn.sstatic.net
/stackoverflow/img/apple-touch-icon.png
3 : /opensearch.xml has 2 groups:
/opensearch.xml
4 :/has 2 groups:
/
5 : http://www.stackoverflow.com has 2 groups:
http:
//www.stackoverflow.com
6 : http://www.stackoverflow.com/ has 2 groups:
www.stackoverflow.com
/
7 : http://stackoverflow.com/ has 2 groups:
stackoverflow.com
/
8 : http://careers.stackoverflow.com has 2 groups:
http:
//careers.stackoverflow.com
7 : fakedomain/index.php has 2 groups:
fakedomain
/index.php
8 : fakedomain.com/index.php has 2 groups:
fakedomain.com
/index.php
9 : fakedomain.com/ has 2 groups:
fakedomain.com
/
10 : /fakedomain.com/ has 2 groups:
/fakedomain.com/
11 : /index.html/ has 2 groups:
/index.html/
12 : index.html has 2 groups:
index.html
13 : has 2 groups:
C#正則表達式測試儀:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
那麼我怎樣才能刪除與.ico
或.png
的鏈接,並添加一些其他修復,並獲得一個很好,乾淨的正則表達式?
我同意你的一般方法,但是在這種情況下'System.Uri'是錯誤的,它需要一些努力來破解它。考慮在URL中使用'%2F'字符 - 你必須自己修復它。 – greenoldman
感謝您的提示,但我想自己編寫它。如果要加速應用程序,我不介意在ASM中編寫代碼。所以如果正則表達式不是那種採取的方式? Thx再次 – Naster
greenoldman:它是越野車嗎?還是需要通過衆多的Uri類方法確保輸入是正確的未轉義? Naster:如果你想要一個正確的解析器,它可以與任何你遇到的uri一起工作,而不僅僅是你期望的那些,你需要使用System.Uri。或者您可以使用http://tools.ietf.org/html/rfc3986作爲參考創建自己的實現。 –