名字-编号/编号正则表达式Java

名字-编号/编号正则表达式Java,java,regex,Java,Regex,我正在尝试用java创建一个正则表达式,用于检查字符串的以下格式: “FirstName LastName-编号/编号” 例如: 约翰-66/25 我已经试了半个小时了,看起来很简单,但我没能掌握窍门。以下是我的最新尝试: [A-Z]{1}[a-z]+\s{1}[A-Z]{1}[a-z]+\s{1}\\-\s{1}[0-9]{2}\\/[0-9]{2} 考虑检查fname和lname的第一个字母。名字和姓氏部分有效,但“-”字符和其后的字符无效 正则表达式使用的代码: public class

我正在尝试用java创建一个正则表达式,用于检查字符串的以下格式:

“FirstName LastName-编号/编号”

例如:

约翰-66/25

我已经试了半个小时了,看起来很简单,但我没能掌握窍门。以下是我的最新尝试:

[A-Z]{1}[a-z]+\s{1}[A-Z]{1}[a-z]+\s{1}\\-\s{1}[0-9]{2}\\/[0-9]{2}
考虑检查fname和lname的第一个字母。名字和姓氏部分有效,但“-”字符和其后的字符无效

正则表达式使用的代码:

public class Regex {
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    while(true){

        System.out.println("Enter the regular expression");

        Pattern p = Pattern.compile(scan.nextLine());

        System.out.println("Enter the matcher");

        Matcher m = p.matcher(scan.nextLine());

        boolean success = m.find();

        System.out.println(success);
    }
}

破折号
\\-
前面的双反斜杠和正斜杠
\\/
实际上与您想要的字符串中不存在的文本
\
匹配

一些补充意见:

  • 如果只需要一个匹配项,则不需要
    {1}
    ,除非指定了其他内容,否则该匹配项是隐式的

  • 此外,破折号
    -
    不是字符类之外的特殊字符,因此不需要转义

  • [0-9]
    可以简化为
    \d

  • 清理:

    [A-Z][a-z]+\s[A-Z][a-z]+\s-\s\d{2}/\d{2}
    

    工作示例:

    {1}
    是冗余的,请将其删除。--为什么里面有
    \
    ?这是原始正则表达式(单个反斜杠)还是Java字符串文字(所有反斜杠都加倍)?——它应该是
    [A-Z][A-Z]+\s[A-Z][A-Z]+\s-\s[0-9]{2}/[0-9]{2}
    “[A-Z][A-Z]+\\s[A-Z][A-Z]+\\s-\\s[0-9]{2}/[0-9]{2}”
    是的,请显示正则表达式中使用的实际java代码。双反斜杠用于在一个特殊字符(如“-”上指示减号()在字符类之外的正则表达式中不特殊。在Java中,正斜杠(
    /
    )都不是。它们不需要转义,但如果需要转义,则转义只需一个反斜杠(
    \
    )即可完成。您是对的。无论出于什么原因,我都使用了双反斜杠,甚至没有看到这里的问题。该睡觉了。