2014-05-09 122 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,应更换(.*?)通过适合您的网址的某种模式,并在其中应用非贪婪(*?+?)。