有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

regexjava模式。编译表达式“/login?(\\?.+)?”

我试图理解下面给出的正则表达式:

"/login?(\\?.+)?"

我已经讲过了Java docs,但是我不能清楚地理解这个表达的目的

我知道它查找以/login开头的字符串,然后字符?(\\?.+)?代表什么? 请帮助我理解这一点


共 (4) 个答案

  1. # 1 楼答案

    • /login匹配文字字符/login
    • ?使n成为可选的
    • (parentheses)捕获组1内部的匹配项
    • /login
    • \\?匹配文本?。在普通正则表达式中,它应该是\?,但在Java字符串中,反斜杠必须用另一个反斜杠转义
    • .+匹配一个或多个字符,其中可以包括spaces and my dog!

    样本匹配

    /logi
    /login
    /login?a
    /logi?an
    /logi?and my dog
    

    对“这个正则表达式是什么意思?”的一般回答

    1. 您可以使用诸如Seeregex101之类的工具来处理正则表达式。右窗格逐个标记地解释它
    2. 有几种解释工具基于相同的原始Perl库,例如this one,其中一个答案就是基于这些工具
    3. 最终的答案可以在《掌握正则表达式》第三版和一些优秀的在线教程中找到,包括本网站上的regex FAQ
  2. # 2 楼答案

    logi是表达式的静态内容

    • n?表示n从不出现或只出现一次
    • ()?表示()中的表达从未出现或只出现一次
    • \\?表示\从未发生或发生过一次
    • .+表示任何字符(新行除外)出现一次或多次
  3. # 3 楼答案

    它可以选择在/login之后匹配文本?some-text-here。另外/login?使最后n可选:

    它匹配以下输入:

    /logi
    /login
    /logi?something
    /login?something
    

    Regex Demo

  4. # 4 楼答案

    它匹配/logi,后面是可选的n?=前面的元素是可选的),后面是可选的组(()限制一个组),以?开始(由于双\转义?),后面是一个或多个字符(.+.=任意字符,+=一个或多个字符)