Java正则表达式匹配

时间:2010-12-16 17:58:22

标签: java regex

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

1. PTYU fmmflksfkslfsm

我试过的正则表达式是:

^\d+[.]\s{1}[A-Z]+

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

3 个答案:

答案 0 :(得分:27)

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

这有效:

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

打破它:

  • ^ =字符串开头
  • \d+ =一个或多个数字\已转义,因为它位于字符串中,因此\\
  • \. =文字.(或您原来的[.]没问题)(再次,在字符串中转义)
  • \s =一个空白字符(后面不需要{1}(我现在不再提及转义)
  • \p{Lu}+ =一个或多个大写字母(使用正确的Unicode转义 - 谢谢你,tchrist,在下面的评论中指出这一点。在英语术语中,相当于是[A-Z]+
  • .* =其他任何内容

有关详细信息,请参阅the documentation here

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

答案 1 :(得分:1)

这取决于您使用的是哪种方法。我认为如果你使用Matcher.find()会有效。如果您使用Matcher.matches(),它将无法工作,因为匹配在整行上工作。如果您使用匹配()修复您的模式如下:

^\d+\.\s{1}[A-Z]+.*

(注意尾随.*

我还会使用\.代替[.]。它更具可读性。

答案 2 :(得分:0)

"^[0-9]+\. [A-Z]+ .+"