正则表达式捕获url的中间部分

时间:2017-01-12 22:09:29

标签: sql regex amazon-redshift

我正在试图找出基本的正则表达式,以便从sql数据库中捕获google url的中间部分。

例如,一些链接:

https://www.google.com/cars/?year=2016&model=躲闪 + 杜兰戈和ID = 1234 https://www.google.com/cars/?year=2014&model=吉普车 + 切诺基 + 交叉和ID = 6789

捕捉文字以获得躲闪+ durango 吉普+切诺基+交叉的正则​​表达式是什么? (没关系,+仍然在那里。)

我的尝试:

1)     \b[=.]\W\b\w{5}\b[+.]?\w{7} ,但这显然不起作用,因为这是一个硬编码的场景,只会像闪避durango例子的东西。 (会提取“闪避+ durango”

2)使用正面回顾,

[^+]( ?=&id ) 

但我不完全确定如何使用它,因为这只能抓住&符号

如何在“model =”和“& id”边界之间以任意数量的+分隔线提取(可能)任意长度的字符串?

2 个答案:

答案 0 :(得分:0)

似乎您可以使用regexp_replace并访问匹配组:

regexp_replace(input, 'model=(.*?)([&\\s]|$)', E'\\1')

来自here

  

regexp_replace函数为新文本提供替换   匹配POSIX正则表达式模式的子字符串。它有   语法regexp_replace(source,pattern,replacement [,flags])。该   如果没有匹配,则返回源字符串不变   图案。如果匹配,则返回源字符串   替换字符串替换匹配的子字符串。该   替换字符串可以包含\ n,其中n是1到9,表示   与第n个括号匹配的源子串   应该插入模式的子表达式,它可以包含\&   表示匹配整个模式的子字符串应该是   插入。写\如果需要在文本中添加文字反斜杠   替换文字。 flags参数是可选的文本字符串   包含零个或多个改变函数的单字母标志   行为。标志i指定不区分大小写的匹配,而标志g   指定替换每个匹配的子字符串而不仅仅是   第一个

答案 1 :(得分:0)

我可能会误解,但如果你想获得模型,只需选择model=和&符号(&)之间的所有内容。

regexp_matches(input, 'model=([^&]*)')
  • model=:按字面意思匹配
  • ([^&]*):捕获
    • [^&]*:任何不是&符号的东西
      • *:无限次