题目:
以下正则表达式,能用来提取下面文字中的所有日期的是(D)
1 |
|
A \d{4}-\d{2}-\d{2}
B (19|20)\d{2}-(0[1-9]|1[0-2])-[0-2][1-9]
C (19|20)\d{2}-(0[1-9]|1[0-2])-([0-2][1-9]|3[0-1])
D 都不能
解析:
A. \d{4}-\d{2}-\d{2}
这个正则表达式匹配的是 "yyyy-mm-dd" 格式的日期,其中 yyyy 表示年份,mm 表示月份,dd 表示日期。但是在提供的文本中,还有 "31/03, 2016" 这种以斜杠分隔的日期格式,无法被这个正则表达式匹配到。
B. (19|20)\d{2}-(0[1-9]|1[0-2])-[0-2][1-9]
这个正则表达式是一个稍微通用的日期匹配,但它只能匹配 "yyyy-mm-dd" 格式的日期。同样地,它无法匹配 "31/03, 2016" 这种以斜杠分隔的日期格式。
C. (19|20)\d{2}-(0[1-9]|1[0-2])-([0-2][1-9]|3[0-1])
这个正则表达式也只能匹配 "yyyy-mm-dd" 格式的日期,但对于 "31/03, 2016" 这种以斜杠分隔的日期格式同样无法生效。
所以,所有这些选项都无法同时匹配两种不同格式的日期。如果想要匹配这两种格式,你需要构建一个更加通用的正则表达式,能够同时匹配 "yyyy-mm-dd" 和 "dd/mm, yyyy" 这两种格式。
那么(19|20)什么意思呢?
`(19|20)` 是一个正则表达式中的一个分组,用于匹配年份的前两位。具体解释如下:
- `(19|20)`:这个部分使用了括号和竖线(|)来创建一个分组。它表示可以匹配 "19" 或者 "20"。这是为了匹配年份的前两位,通常用来表示 20 世纪和 21 世纪。
所以,例如 `(19|20)\d{2}` 就可以匹配从 1900 到 2099 年的年份。
那么(0[1-9]|1[0-2])啥意思呢?
这部分是一个正则表达式的分组,用于匹配月份。具体解释如下:
- `(0[1-9]|1[0-2])`:这个部分同样使用了括号和竖线(|)来创建一个分组。它表示可以匹配从 "01" 到 "09" 或者从 "10" 到 "12" 的数字。
这个表达式对应的是月份,因为月份是从 1 到 12,但是在正则表达式中,如果数字是个位数,通常会使用 0 开头,例如 "01"、"02" 等。所以 `(0[1-9]|1[0-2])` 可以匹配所有合法的月份表示。
\d{2}呢?
\d{2}
是一个正则表达式的部分,用于匹配两位数字。具体解释如下:
\d
:这是一个正则表达式中用于匹配数字的元字符。它等同于[0-9]
,表示匹配任意一个数字字符。{2}
:这是一个量词,指示前面的元字符(这里是\d
)需要连续匹配两次。
所以,\d{2}
可以匹配任意两位数字。例如,它可以匹配 "01"、"23"、"45" 等。