在斜杠之间提取字符串,但第二个斜杠可能不存在[重复]
Posted
技术标签:
【中文标题】在斜杠之间提取字符串,但第二个斜杠可能不存在[重复]【英文标题】:Extract String Between Slashes, But Second Slash May Not Exists [duplicate] 【发布时间】:2020-09-02 02:10:11 【问题描述】:我试图弄清楚如何从表单中捕获的 URL 中提取用户名。我确实有下面的正则表达式,但问题是 第二个正斜杠可能不存在。以下是示例:
示例网址https://test.site.com/u/username
https://test.site.com/u/username/pref/summary
我正在尝试提取username
。
当前正则表达式/u/(.*?)/
我上面的当前成功提取了username
,但是只有在用户名后面还有一个/
。第二个/
需要是可选的;它可能存在,也可能不存在,之后可能会有,也可能不会。
我只是找不到正确的正则表达式来使第二个 /
成为可选(最后使用 ?
没有帮助),但如果这有意义的话,并不是完全“可选”。
提前致谢!
【问题讨论】:
改成/u/([^/]*)
【参考方案1】:
/u/([^/]*)
将尽可能多地匹配/u/
之后的非/
字符。
它不会匹配pref
和summary
,
因为[^/]
匹配任何字符除了 /
,
所以[^/]*
匹配一个字符串(尽可能长)
/
以外的字符数。
考虑一下:如果您的模式是B[aeiou]*
你的输入是Beetles
(或Beethoven
),
它只会匹配Bee
,
停在(之前)第一个不是元音的字符处。
同样,[^/]*
在/
第一次出现(之前)处停止。
【讨论】:
谢谢 - 就是这样,但我不明白!这如何不捕获其他正斜杠之后的字符串,例如我的示例中的“pref”和“summary”? 感谢您的解释!现在有道理了!干杯。以上是关于在斜杠之间提取字符串,但第二个斜杠可能不存在[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如果我只想提取第二个斜杠后的第二个,如何在大查询中使用 regex_extract?
PLSQL 在第 N 次和第 M 次出现字符之间选择 substr