首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex ^d{4}-\\d{2}-\\d{2}$

Regex ^d{4}-\\d{2}-\\d{2}$
EN

Stack Overflow用户
提问于 2021-11-02 07:04:28
回答 2查看 3K关注 0票数 2

我必须将日期格式化为特定格式的^\d{4}-\d{2}-\d{2}$.我找了一段时间,找不到解决办法。我发现这些d{4}二.D几乎与我的需求相匹配,但我不知道为什么它不匹配。我在用regex101测试

据我所知,第一项应该有效。

代码语言:javascript
复制
2021-11-10
代码语言:javascript
复制
"1234-12-34"

我还试着从Ascii表中复制字符,以确保它们不是特殊的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-02 07:07:17

尝试删除^$

代码语言:javascript
复制
\\d{4}-\\d{2}-\\d{2}

^匹配行的开头,$匹配行的末尾。所以第二个条目在开始之后和结束之前有",它不匹配。

根据您的语言,不需要双反斜杠(\\):

代码语言:javascript
复制
\d{4}-\d{2}-\d{2}

加倍反斜杠用于逃避目的。

票数 1
EN

Stack Overflow用户

发布于 2021-11-02 07:40:32

使用POSIX字符类

你没有提到语言,所以我不知道你为什么要逃避你的反斜杠字符。如果您正在寻找一个可移植的解决方案,您可以使用POSIX字符类来实现这一点,而不是使用\d原子,这个原子(虽然现在相当常见)肯定不是通用的。

例如,这个锚定表达式:

代码语言:javascript
复制
    ^[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}$

将与我所知道的任何扩展正则表达式引擎相匹配,包括egrep、pcregrep、Ruby、GNU、GNU (带有-r标志)以及其他引擎。例如:

代码语言:javascript
复制
    $ echo "2021-11-10" | egrep '^[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}$'
    2021-11-10

注意事项

  1. 它不能使用不理解{}长度原子的引擎(例如,没有-E标志的BSD )。
  2. 它将验证格式,但实际上不会确保它是有效日期。为此,您需要一个了解日期的工具,例如GNU日期。例如: $ date -d '2021-11-10‘Wed Nov 10 00:00:00 :00:00EST 2021 $ date -d '1234-12-34’日期:无效日期‘1234-12-34’
  3. 正则表达式是强大的,但它们并不总是每个问题的正确解决方案,特别是当问题是数据验证问题时。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69806492

复制
相关文章

相似问题

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