我有一个我正在解析的网址:
/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等...)
谢谢, 本
答案 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]+)
匹配任意数字一次或多次。它也是第三个捕获组
.*
匹配任何字符,任意次数
$
匹配字符串的结尾为
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