2014-05-09 65 views
1

什麼是「最好」的方式來匹配一個字符串中的URL,該字符串中有很多逗號(,,,,,),並且可能在404字符串後面有分隔符昏迷。在404字符串到來之後,獲取字符串直到這部分。正則表達式 - 直到

例子:

http://stackoverflow.com/this,,,can,be,,a,slug,,,0,404 

http://stackoverflow.com/this,,,can,be,,a,slug,,,0 

我得:http://stackoverflow.com/this,,,can,be,,a,slug,,,0

嘗試這些:

^(.*)(\,404)? 
[^,404]* 

回答

2

使用積極前瞻:

.*(?=,404) 

,或者如果你想有一個捕獲組,使用:

(.*)(?=,404) 

演示在這裏:http://regex101.com/r/lH1vZ3

+0

如果沒有404字符串會怎麼樣? –

+0

@ R.CanserYanbakan嘗試像這樣修改:[^。*?(?=,404 | $)](http://regex101.com/r/zL1rX0)...添加開始錨點,量詞[greedy] (http://www.rexegg.com/regex-greed.html)並添加OR end-anchor到'(?=,404)' –

1

這裏的問題是,(.*)會匹配一切,包括404,如果您最後一個是可選的。你需要的是一個非貪婪的.*,它會盡可能少地匹配(儘可能少)。 試試這個:

^(.*?)(,404)?$ 

(我不認爲,應該是轉義)

當然,如果你不知道你正在處理一個正確的URL,應更換(.*?)通過適合您的網址的某種模式,並在其中應用非貪婪(*?+?)。