我有这个代码,我正在努力与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 ?
我该如何解决?
答案 0 :(得分:1)
你有几种方法可以去这里,有些方法比其他方式更好,但都取决于你的需要。
首先,使用您当前的正则表达式,只是简单地转义{&#34;正则表达式中具有特殊含义的?
;可能存在也可能不存在&#34;:
(?<=paralash/).*(?=\?trk=)
但是,你可以通过将贪婪的比赛改为仅仅#34;数字来改善这一点。使用\d+
进行匹配:
(?<=paralash/)\d+(?=\?trk=)
此外,如果您正在进行分组而不仅仅是匹配,则可以删除lookbehind并将其作为前缀:
paraslash/(\d+)\?trk=
答案 1 :(得分:0)
逃离?
:
(?<=paralash/).*?(?=\?trk=)
// here __^
答案 2 :(得分:0)
答案 3 :(得分:0)
我认为它是perl兼容语法。
最好将您想要的内容分组,而不是向后和向前看:
\/paralash\/(\d+)\?trk=
然后使用\ 1或$ 1来捕获结果。
我转发/
,因为我认为/
是您的分隔符。