如何使用 postgres 函数 regexp_replace 从 URL 到端口号获取结果?
how to get result from URL upto port number using postgres function regexp_replace?
我需要你的帮助来使用 Postgres DB 的 regexp_replce
函数从给定的字符串中获取子字符串。
我正在尝试以下查询,
select regexp_replace('http://localhost:8080/redirectHome?abc=xyz&sortBy=111', '(.*?/){3}', '');
但它给了我错误的结果或意外的结果。
预期结果是:http://localhost:8080
我的疑问是,我在 regex
地方或 regex_replace
函数中的其他地方提供了错误的输入。
您可以从字符串的开头匹配 /
个分隔块的 3 个序列,捕获该部分,然后只匹配字符串的其余部分以将其删除:
select regexp_replace('http://localhost:8080/redirectHome?abc=xyz&sortBy=111', '^([^/]*(?:/[^/]*){2}).*', '');
这里,
^
- 字符串开头
([^/]*(?:/[^/]*){2})
- 第 1 组(稍后用替换模式中的 </code> 占位符引用):
<ul>
<li><code>[^/]*
- /
以外的任何 0+ 个字符
(?:/[^/]*){2}
- 连续出现 2 次:
/
- 斜杠
[^/]*
- /
以外的任何 0+ 个字符
.*
- 尽可能多的任意 0+ 个字符
</code> - 将第 1 组中捕获的文本插入到结果字符串中的占位符。</li>
</ul>
<p>或者,在第 4 个 <code>/
之前提取文本:
select regexp_matches('http://localhost:8080/redirectHome?abc=xyz&sortBy=111', '^[^/]*(?:/[^/]*){2}');
此处,^[^/]*(?:/[^/]*){2}
匹配除 /
之外的前 0+ 个字符,然后匹配 2 次出现的 /
,后跟除 /
之外的另外 0+ 个字符。
参见online demo:
我看到上面的详细答案,但这里有一些不同的答案。仅需9步
/^([^\d]*)([\d]*)/
第一个捕获组捕获从最开始到端口号之前的所有内容
第二个捕获组捕获端口号
我需要你的帮助来使用 Postgres DB 的 regexp_replce
函数从给定的字符串中获取子字符串。
我正在尝试以下查询,
select regexp_replace('http://localhost:8080/redirectHome?abc=xyz&sortBy=111', '(.*?/){3}', '');
但它给了我错误的结果或意外的结果。
预期结果是:http://localhost:8080
我的疑问是,我在 regex
地方或 regex_replace
函数中的其他地方提供了错误的输入。
您可以从字符串的开头匹配 /
个分隔块的 3 个序列,捕获该部分,然后只匹配字符串的其余部分以将其删除:
select regexp_replace('http://localhost:8080/redirectHome?abc=xyz&sortBy=111', '^([^/]*(?:/[^/]*){2}).*', '');
这里,
^
- 字符串开头([^/]*(?:/[^/]*){2})
- 第 1 组(稍后用替换模式中的</code> 占位符引用): <ul> <li><code>[^/]*
-/
以外的任何 0+ 个字符
(?:/[^/]*){2}
- 连续出现 2 次:/
- 斜杠[^/]*
-/
以外的任何 0+ 个字符
.*
- 尽可能多的任意 0+ 个字符</code> - 将第 1 组中捕获的文本插入到结果字符串中的占位符。</li>
</ul>
<p>或者,在第 4 个 <code>/
之前提取文本:
select regexp_matches('http://localhost:8080/redirectHome?abc=xyz&sortBy=111', '^[^/]*(?:/[^/]*){2}');
此处,^[^/]*(?:/[^/]*){2}
匹配除 /
之外的前 0+ 个字符,然后匹配 2 次出现的 /
,后跟除 /
之外的另外 0+ 个字符。
参见online demo:
我看到上面的详细答案,但这里有一些不同的答案。仅需9步
/^([^\d]*)([\d]*)/
第一个捕获组捕获从最开始到端口号之前的所有内容
第二个捕获组捕获端口号