寻找正则表达式或字符串函数

Looking for regexp or string function

我正在解析下面的 URL:

/visitor/browseJobDetails.do?comeFrom=email&jobId=3931052&distance=18&rx=email_NJNY%7CProvider_Featured%7Cjobtitle%7C91942%7CCHILDCARE`

我希望能够获取 "email&jobId=" 和“&distance”之间的整数。所以在这种情况下是 3931052。谁能帮我使用 regexp 或 vertica 字符串函数(substring、instring 等...)

谢谢, 本

正则表达式可以工作,但使用包含在您的语言中的函数要简单得多(例如,PHP 的 parse_url(),或 Ruby 的URI.parse()).

无论如何,对于您可以使用的正则表达式,这里有一个示例:

^.*\?comeFrom\=([^&]+)&jobId\=([0-9]+)&distance\=([0-9]+).*$

然后将其替换为 </code> 或 <code>(取决于您的语言)。

这是正则表达式的作用:

^匹配字符串的开头
.* 匹配任意字符,任意次数
\?comeFrom\= 按字面匹配 ?comeFrom=
([^&]+) 匹配任何不是 & 一次或多次的字符。也是第一个捕获组
&jobId\= 按字面匹配 &jobId=
([0-9]+) 匹配任意数字一次或多次。也是第二个捕获组
&distance\= 按字面匹配 &distance=
([0-9]+) 匹配任意数字一次或多次。也是第三个捕获组。
.* 匹配任意字符,任意次数
$匹配字符串结尾

Here's an example of the regex in action 在 regex101.com

当用 </code> 或 <code> 替换字符串时,您将用第二个捕获组替换它,在本例中为 jobId 参数。

这是我的 lookahead/lookbehind 模式版本。它将仅匹配 email&jobId=&distance 之间的数字 - (\d+)

regexp_substr(:URL, '.*(?<=email&jobId\=)(\d+)(?=&distance).*', 1, 1, 'c', 1);

daniel=> select regexp_substr($$/visitor/browseJobDetails.do?comeFrom=email&jobId=3931052&distance=18&rx=email_NJNY%7CProvider_Featured%7Cjobtitle%7C91942%7CCHILDCARE`$$, '.*(?<=email&jobId\=)(\d+)(?=&distance).*', 1, 1, 'c', 1);
 regexp_substr
---------------
 3931052
(1 row)

这是一个例子:https://regex101.com/r/xC8fA1/1