首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的正则表达式: Pattern.compile(“J*\\d[0-35-9]-\\d\d-\\d\\d\d”)

Java中的正则表达式: Pattern.compile(“J*\\d[0-35-9]-\\d\d-\\d\\d\d”)
EN

Stack Overflow用户
提问于 2013-11-08 04:13:24
回答 5查看 4.4K关注 0票数 3

我在Java正则表达式中找到了一段代码,这让我感到困惑:

代码语言:javascript
复制
Pattern.compile( "J.*\\d[0-35-9]-\\d\\d-\\d\\d" );

要编译的字符串是:

代码语言:javascript
复制
String string1 = "Jane's Birthday is 05-12-75\n" + "Dave's Birthday is 11-04-68\n" + "John's Birthday is 04-28-73\n" + "Joe's Birthday is 12-17-77";

这意味着什么?

代码语言:javascript
复制
[0-35-9]

为什么有4“d”而不是3?我想生日的时候只有三个号码。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-11-08 08:17:02

\\d的形式只是匹配一个数字,而不是一个数字。

因此,使用\\d\\d模式将匹配两个连续数字。

使用\\d\\d-\\d\\d将匹配两个连续数字,一个-字面上是两个连续数字。

让我们看看你的对手和原因。

代码语言:javascript
复制
Joe's Birthday is 12-17-77
                  ^          match a digit 0 to 9
                   ^         match any character of '0' to '3', '5' to '9'
                    ^        match a '-' literally
                     ^       match a digit 0 to 9
                      ^      match a digit 0 to 9
                       ^     match a '-' literally
                        ^    match a digit 0 to 9
                         ^   match a digit 0 to 9

[0-35-9]部件将0的任何字符与3匹配,59匹配。

你的常规表达方式解释道:

代码语言:javascript
复制
J              'J'
.*              any character except \n (0 or more times)
\d              match a digit 0 to 9
 [0-35-9]       any character of: '0' to '3', '5' to '9'
   -            match a '-' literally
  \d            match a digit 0 to 9
  \d            match a digit 0 to 9 
   -            match a '-' literally
  \d            match a digit 0 to 9
  \d            match a digit 0 to 9
票数 3
EN

Stack Overflow用户

发布于 2013-11-08 04:16:31

\\d不匹配一个数字,它匹配一个数字。区别是\\d\\d将匹配两个连续数字。

[0-35-9]将匹配范围0-3中的数字或范围5-9中的数字。

实际的结果是这个月的生日是10,11,12,01,02,03,05,06,07,08或09。日期和年份并不重要,只要它们是两位数。这是一种长篇大论的说法:“给我找找任何不在四月(04)的生日”。

票数 2
EN

Stack Overflow用户

发布于 2013-11-08 04:18:49

[0-35-9]是什么意思?

这意味着您正在提供一个包含在方括号中的字符集。它指定将成功匹配给定输入字符串中单个字符的给定字符。因此,如果匹配字符是通过0通过3进行的,或者5是通过9进行的,则上述类型的字符将匹配。

为什么有4“d”而不是3?我想生日的时候只有三个号码。

您的生日字符串部分是:Birthday is 05-12-75

\d是一个预定义字符类,其中\d表示一个数字,而\d\d表示两个连续数字。因此,对于日期xx-xx-xx-xx,我们将编写\\d\\d-\\d\\d-\\d\\d-\\d\\d,其中假定x表示一个数字(0-9)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19851462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档