2017-06-20 123 views
0

你能幫我解決一下正則表達式嗎?我是新手。文本提取的正則表達式

我的要求是我想沒有提取車輛(即123456789)從下面的網址:

mysite.com/resource?slk=121&ops=rewww&from=kld&to=aop&search=things&validVehicle=sdfdsdff-sdfdf-sddf%3AVX%3ALNCX%3A123456789%3AOPW%3ALOS 

我想下面的表達式:

[&?]{1}validVehicle[=]{1}[^&]*[%3A]{1}([^%&]+) 

但它給無效的結果。你能在這方面幫助我嗎?

+0

你使用什麼編程語言? – baao

+2

也許,['[&?] validVehicle = [^&] *%3A(\ d +)'](https://regex101.com/r/TjfhX5/2)將會完成這項工作。或者['[&?] validVehicle = [^&] *(\ d {9})'](https://regex101.com/r/TjfhX5/3)。車輛號碼的要求是什麼? –

+0

是的,它確實是https://regex101.com/r/JqDSBG/1 – fxlacroix

回答

1

一個純粹的正則表達式的解決方案:

[&?]validVehicle=[^&]*(\d{9}) 

或者,如果你確信他們似乎%3A後沒有跟隨以數字:

[&?]validVehicle=[^&]*%3A(\d{9})(?!\d) 

this regex demoanother regex demo。你所尋求的價值是在第1組

詳細

  • [&?] - 一個?&
  • validVehicle= - 文字串
  • [^&]* - 比&等,儘可能多的任何符號儘可能直到最後
  • %3A - 文字子串
  • (\d{9}) - 第1組:9位數字
  • (?!\d) - 未跟隨數字。
0

A「結構」 approach可能是使用那些「%3A」冒號作爲圖案的分隔符,與非貪婪通配符.*(此匹配由所述所定義「validVehicle」的第四場組合分隔符%3a,並假定這種結構不發生變化):

[&?]validVehicle=(?:.*?%3a){3}(.*?)%3a 

這種方式VS的\d{9}模式的效用已經建議真的只是取決於你所知道的某些有關傳入的數據。這種模式肯定會匹配的其他字段中的九位數字。