我正在试图找出基本的正则表达式,以便从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”边界之间以任意数量的+分隔线提取(可能)任意长度的字符串?
答案 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=
:按字面意思匹配([^&]*)
:捕获
[^&]*
:任何不是&符号的东西
*
:无限次