2014-09-22 126 views
2

我有這個代碼,我試圖去與正則表達式一起工作,但我是新來的,我不知道我做錯了什麼。正則表達式只有數字

我試圖得到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

你在做什麼工具/語言? – anubhava 2014-09-22 14:28:12

+0

將前視中的'?'換掉,並使'。*?'不要貪婪。 – Toto 2014-09-22 14:28:16

+0

?在正則表達式中有一個特殊的含義,把它轉義成'(?<= paralash /)。*(?= \?trk =)' – Tensibai 2014-09-22 14:28:36

回答

0

逃離?

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

我認爲這是Perl兼容的語法。

最好是組你想要的,而不是來回找什麼:

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

然後使用\ 1或$ 1捕捉到的結果。

我逃/,因爲我認爲/是您的分隔符。

看前後是慢下來的正則表達式的權衡,但獲得更多的權力。在你的情況下,沒有它們可能會加速。

1

你有幾個方法可以去這裏,有比別人更好,但所有這些都取決於你的需求。

首先,使用當前的正則表達式,是簡單地逃避其擁有的「可能會或可能不存在」正則表達式的特殊含義?

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

但是,可以通過改變提高這貪婪的比賽變成了「數字只有」比賽用\d+

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

另外,如果你正在做的分組,而不是隻匹配你可以刪除回顧後,使之成爲前綴,而不是:

paraslash/(\d+)\?trk=