2010-01-06 33 views
1

比方說,我們有一些文字:需要一些代碼#100(正則表達式),這將改變URL域

Lorem存有胡蘿蔔,生態番茄湯。 Vivamus的cursus前庭consequat等tristique暫準feugiat ELIT convallis。對於交流risus vehicula tortor facilisis tincidunt。但是,除非隱退或香蕉或一些足球和質量。或者觀光,層妝宣傳聊天。 http://subdomain-1.example.com/dir1 Lorem存有悲坐阿梅德,consectetur adipiscing ELIT。現在車輛如辣椒。南現在的教科書,局籃球生涯高科技硬件設施。類由我們的婚姻開始就業的扭曲,每himenaeos。明日電視直徑食譜和營養保健房地產恐懼蛋白。在最新的,裙子大門http://subdomain-2.example.com/dir2沒有創新,但現在。 Quisque suscipit,烏仁娜現在坐阿梅德rhoncus存有悲英里rhoncus LOREM,AC luctus lectus在藥房。

需要C#功能,查找和替換所有網址:假設爲example.com域名與一個給stackoverflow.com,但一切仍然是相同的(子域名和URL的其餘部分)。

例如替換文本應該是這樣的後:

Lorem存有胡蘿蔔,生態番茄湯。 Vivamus的cursus前庭consequat等tristique暫準feugiat ELIT convallis。對於交流risus vehicula tortor facilisis tincidunt。但是,除非隱退或香蕉或一些足球和質量。或者觀光,層妝宣傳聊天。 http://subdomain-1.stackoverflow.com/dir1 Lorem存有悲坐阿梅德,consectetur adipiscing ELIT。現在車輛如辣椒。南現在的教科書,局籃球生涯高科技硬件設施。類由我們的婚姻開始就業的扭曲,每himenaeos。明日電視直徑食譜和營養保健房地產恐懼蛋白。在最新的,裙子大門http://subdomain-2.stackoverflow.com/dir2沒有創新,但現在。 Quisque suscipit,烏仁娜現在坐阿梅德rhoncus存有悲英里rhoncus LOREM,AC luctus lectus在藥房。

+1

這最初似乎是一個很容易解決的問題 - 甚至可能是一個家庭作業。你已經有什麼代碼,你有什麼問題呢? – atk 2010-01-06 18:59:22

+0

當然,在現實世界中,將不是很容易,因爲你想subdomain-1.example.com ** ** **與subdomain-1.stackoverflow.com更換**和** subdomain- 1.example.co.uk替換** ** ** subdomain-1.stackoverflow.co.uk,但不*有* ** ** example.google.com與stackoverflow.google.com更換** – 2010-01-06 19:06:40

+0

,你不能只檢查了三級域名的任何東西,在結束。因爲在英國決定每個域名必須在第三級註冊之前,只有**註冊了一些域名* something * .uk。 – 2010-01-06 19:11:03

回答

1

1認爲這項工作:命名組

Regex r = new Regex("@(?<SCHEME>https?://)(?<SUBDOMAIN>([^.]+\.)*)example\.com(?<PATH>/.*)?"); 
string newText = r.Replace(text, "${SCHEME}${SUBDOMAIN}stackoverflow.com${PATH}"); 

1使用,因爲它們更容易跟蹤和讀取。首先是方案,http://https://,第二抓起子域,而最後一個抓住一個可選路徑(正如你可能已經http://foo.example.comhttp://foo.example.com/http://foo.example.com/bar

+0

不適用於'http:// sub2.sub1.example.com' – Hogan 2010-01-06 19:09:22

+0

這可能是修復:'(? [^。] + \。)* example \ .com'等 – Hogan 2010-01-06 19:11:54

+0

此外,沒有我的修復這也失敗'http:// example.com' – Hogan 2010-01-06 19:17:58

0

您使用應該是這個樣子的正則表達式:

​​

注意:您將在100#的符號來重寫這個。

+0

這要求舊域名和新域名在同一頂級域名(TLD)上。 – tghw 2010-01-06 19:05:11

+0

不處理https: – Hogan 2010-01-06 19:07:01

+0

我已經改變它以解決tghw和Hogan的要點 - 注意這只是一個通用的例子(你不應該只使用其他人的正則表達式而不檢查/自定義)。 – ternaryOperator 2010-01-06 19:11:02