我正在解析一个URL,如下所示:
/visitor/browseJobDetails.do?comeFrom=email&jobId=3931052&distance=18&rx=email_NJNY%7CProvider_Featured%7Cjobtitle%7C91942%7CCHILDCARE`我希望能够抓住"email&jobId=“和”&距离“之间的整数。所以在这个案子里是3931052。有人能帮我使用regexp或vertica字符串函数(子字符串、指令等)吗?
谢谢,本
发布于 2015-02-04 01:25:58
正则表达式可以工作,但是使用语言中包含的函数(例如,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上的下面是执行中的正则表达式的一个示例
当用$2或\2替换字符串时,您将用第二个捕获组替换它,在本例中,该组将是jobId参数。
发布于 2015-02-06 23:18:01
这是我的版本,带有展望/查找模式。它将匹配一个数字- (\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
https://stackoverflow.com/questions/28311116
复制相似问题