2013-07-10 121 views
0

正則表達式我有一個網址: http://example.com/(S(4txk2wasxh3u0slptzi20qyj))/CWC_Link.aspx了用於提取網址

,但我只想要提取此部分: (S(4txk2anwasxh3u0slptzi20qyj))/

請,任何人都可以建議我的正則表達式這個

+1

你在用什麼語言? – DaoWen

+1

**這可能不是正則表達式的工作,而是現有工具的選擇語言。**正則表達式並非您在涉及字符串的每一個問題時都會出現的魔術棒。您可能想要使用已經編寫,測試和調試的現有代碼。 在PHP中,使用['parse_url'](http://php.net/manual/en/function.parse-url.php)函數。 Perl:['URI' module](http://search.cpan.org/dist/URI/)。 Ruby:['URI'' module](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/URI.html)。 (''Uri'class](http://msdn.microsoft.com/zh-cn/library/txt7706a.aspx) –

回答

1

關鍵點要注意的是,()字符標記邊界,並且沒有/字符在內容中:

/(\(S\([^/()]+\)\))/ 
+0

這裏有一個小錯誤,你在正則表達式中的第一個「/」會導致' /(S(4txk2anwasxh3u0slptzi20qyj))/'。 – Simon

+0

@quetzalcoatl thanx幫我出去的人 –

+0

@Simon:沒有錯。那些是邊界角色。請注意,該表達式中有一個捕獲組。應用正則表達式後,您應該讀取$ 1匹配(第一次捕獲,'(S(4txk2anwasxh3u0slptzi20qyj))'),而不是$ 0(整個匹配'/(S(4txk2anwasxh3u0slptzi20qyj))/')。如果沒有這個邊界字符,如果你傳遞一個'http://farmer.gov.in/asdada(S(foo))asdasd /(S(key))/ asdasdasd'的url,你可能會抓到'foo'而不是'鍵'。但是,當然這是無論如何不可能的,你可以安全地刪除額外的邊界'/'。 – quetzalcoatl

0

這是你的正則表達式。括號中的部分將提取所需片段

/^.+\/([^\/]+)\/.+$/ 

基本上,邏輯很簡單: ^ - 在開始字符串

.+\/的馬克 - 所有符號的下一部分之前匹配。正則表達式的這部分是由正則表達式的考慮到默認的「貪婪」的行爲,因此這部分在你的榜樣

([^\/]+)匹配http://farmer.gov.in/ - 兩條斜線

\/.+$之間的所有符號匹配 - 所有符號匹配,直到結束字符串

例如用PHP語言:

<?php 
$string = "http://farmer.gov.in/(S(4txk2wasxh3u0slptzi20qyj))/CWC_Link.aspx"; 
$regex = "/^.+\/([^\/]+)\/.+$/"; 
preg_match($regex, $string, $matches); 
var_dump($matches); 
?> 

在輸出$matches[1]將有你需要的價值(S(4txk2wasxh3u0slptzi20qyj))

0

此正則表達式做這項工作:

\(.*\)\/ 

只是比賽的開口支架,然後什麼,直到右括號以正斜槓。