正则表达式只有数字

时间:2014-09-22 14:25:54

标签: regex

我有这个代码,我正在努力与Regex合作,但我是新手,而且我不确定我做错了什么。

我正试图获取paralash?trk之间的任何内容,但由于?而无效。如果我删除代码中的?,那么我会使用?得到数字,这不是我需要的。我只需要数字。任何帮助

/paralash/1229857?trk=vsrp_companies_res_name
(?<=paralash/).*(?=?trk=) ---- I get nothing 
(?<=paralash/).*(?=trk=) ----- I get 1229857? <-- I don't want the ? 

我该如何解决?

4 个答案:

答案 0 :(得分:1)

你有几种方法可以去这里,有些方法比其他方式更好,但都取决于你的需要。

首先,使用您当前的正则表达式,只是简单地转义{&#34;正则表达式中具有特殊含义的?;可能存在也可能不存在&#34;:

(?<=paralash/).*(?=\?trk=)

但是,你可以通过将贪婪的比赛改为仅仅#34;数字来改善这一点。使用\d+进行匹配:

(?<=paralash/)\d+(?=\?trk=)

此外,如果您正在进行分组而不仅仅是匹配,则可以删除lookbehind并将其作为前缀:

paraslash/(\d+)\?trk=

答案 1 :(得分:0)

逃离?

(?<=paralash/).*?(?=\?trk=)
//           here __^

答案 2 :(得分:0)

使用它:

(?<=paralash\/).*(?=\?trk=)

演示:http://regex101.com/r/kK2nC1/1

答案 3 :(得分:0)

我认为它是perl兼容语法。

最好将您想要的内容分组,而不是向后和向前看:

\/paralash\/(\d+)\?trk=

然后使用\ 1或$ 1来捕获结果。

我转发/,因为我认为/是您的分隔符。

向后看和向前看是一种权衡,它会降低正则表达式,但会获得更多权力。在你的情况下,它可以在没有它们的情况下加速。