Java正则表达式匹配

use*_*508 11 java regex

当字符串以数字开头,然后是一个点,然后是一个空格和一个或多个大写字符时,我需要匹配.匹配必须出现在字符串的开头.我有以下字符串.

1. PTYU fmmflksfkslfsm
Run Code Online (Sandbox Code Playgroud)

我试过的正则表达式是:

^\d+[.]\s{1}[A-Z]+
Run Code Online (Sandbox Code Playgroud)

它不匹配.对于这个问题,正则表达式是什么?

T.J*_*der 28

(对不起我之前的错误.大脑现在已经坚定了.呃,可能.)

这有效:

String rex = "^\\d+\\.\\s\\p{Lu}+.*";

System.out.println("1. PTYU fmmflksfkslfsm".matches(rex));
// true

System.out.println(". PTYU fmmflksfkslfsm".matches(rex));
// false, missing leading digit

System.out.println("1.PTYU fmmflksfkslfsm".matches(rex));
// false, missing space after .

System.out.println("1. xPTYU fmmflksfkslfsm".matches(rex));
// false, lower case letter before the upper case letters
Run Code Online (Sandbox Code Playgroud)

打破它:

  • ^ =字符串的开头
  • \d+=一个或多个数字(\由于它在字符串中而被转义,因此\\)
  • \.=文字.(或你的原文[.]很好)(再次,在字符串中转义)
  • \s=一个空白字符(不需要{1}它后面)(我现在不再提及转义了)
  • \p{Lu}+=一个或多个大写字母(使用正确的Unicode转义 - 谢谢你,tchrist,在下面的评论中指出这一点.在英语术语中,相当于[A-Z]+)
  • .* =还有别的

请参阅此处的文档了解详细信息

.*如果您使用的方法String#match(如上所述)将尝试匹配整个字符串,则只需要最后一个.