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

时间:2015-02-03 23:59:04

标签: sql regex string vertica

我有一个我正在解析的网址:

/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等...)

谢谢, 本

2 个答案:

答案 0 :(得分:1)

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

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

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

然后将其替换为$2\2(取决于您的语言)。

这是正则表达式的作用:

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

regex101.com上的

Here's an example of the regex in action

$2\2替换字符串时,您要将其替换为第二个捕获组,在这种情况下,它将是jobId参数。

答案 1 :(得分:0)

这是我的版本,具有前瞻/后瞻模式。它会与(\d+)email&jobId=之间的数字&distance匹配。

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