名字-编号/编号正则表达式Java
我正在尝试用java创建一个正则表达式,用于检查字符串的以下格式: “FirstName LastName-编号/编号” 例如: 约翰-66/25 我已经试了半个小时了,看起来很简单,但我没能掌握窍门。以下是我的最新尝试:名字-编号/编号正则表达式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
[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中,正斜杠(/
)都不是。它们不需要转义,但如果需要转义,则转义只需一个反斜杠(\
)即可完成。您是对的。无论出于什么原因,我都使用了双反斜杠,甚至没有看到这里的问题。该睡觉了。