【问题标题】:Regex for validating the first letter of the last part of a URL segment用于验证 URL 段最后一部分的第一个字母的正则表达式
【发布时间】:2015-12-14 21:41:30
【问题描述】:

听起来是个很神秘的问题!

我正在尝试编写一个快速的 RegEx(它将在 Java 中进行评估),它将验证 URL 的最后一部分是否以某个字母开头。

例如我想验证 URL 的最后一部分是否以“P”开头。 即找到 last 出现 / 并 然后 检查下一个字母是“P”

应该验证这一点:

www.mydomain.com/browse/P123
or www.mydomain.com/browse/P987W?id=1

但不符合这个:

www.mydomain.com/Product/C123

(对于使用正则表达式进行验证的系统,我无法对其进行编码!)

【问题讨论】:

    标签: java regex url


    【解决方案1】:

    这对于正则表达式肯定是不可能的。删除最后一段(例如String lastSegment = url.substring(url.lastIndexOf("/"));,然后您可以使用正则表达式检查它的第一个字母。

    【讨论】:

    • 这当然是可能的;查看其他答案。
    • 是的,重新思考问题,没错。但使用 lastIndexOf() 仍然更快
    • 除了问题说他没有任何选择使用其他代码 - 一个使用正则表达式验证的系统,所以我无法编码!。 (如果查询字符串中包含 / ,您的解决方案也会中断)。
    【解决方案2】:

    您可以对没有查询字符串的情况使用正则表达式:

    ".*/P[^/]*$"
    

    这意味着“确保字符串中的最后一个斜杠紧跟大写P。(前导.*不是必需的,但允许您使用Pattern.match而不是Pattern.find)。

    让它也处理查询字符串:

    ".*/P[^/?]*(\?.*)?$"
    

    【讨论】:

    • 如果查询字符串包含斜杠,这将不起作用。
    • 啊,很好。 (同样的事情也适用于#fragment,但这很容易添加。)
    • 实际上,刚刚测试了它(在 Ruby 中,但仍然应该适用)并且它不起作用。第一个.* 需要是[^?#]*
    • 谢谢!欣赏!
    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    相关资源
    最近更新 更多