【问题标题】:How do I match this in as a regex expression如何将其匹配为正则表达式
【发布时间】:2012-01-16 10:05:21
【问题描述】:

如何使用正则表达式匹配字符串以匹配以下字符的任意组合:

Y M D

也就是说,以下字符串应该匹配...只要它包含任意数量的这些字符:

YYYYMMDD
blahYYMMDD
c:\mydir\YYYYDDMM
YYDD
DD
MMYYDD
...etc

所有这些都应该匹配...只要这些字符连续出现,它就应该匹配。正则表达式是什么?

【问题讨论】:

  • 这些都不是我真正想要的。我想匹配(并提取)包含“Y”、“M”或“D”字符的任意组合的任何子字符串,我只想提取 Y、M、D 字符。它们可以是任意数量、任意组合,但只要 Y、M 或 D 字符包含在连续字符串中,我想提取该连续字符串。因此,在我的示例中,返回的值将是:“YYYYMMDD”、“YYMMDD”、“YYYYDDMM”、“YYDD”、“DD”、“MMYYDD”
  • 我想通了,如果我想提取那部分,那么正则表达式将是:([YMD]+)/
  • 你看到我的/[YMD]{2,}/ 的第一个例子了吗?我认为这正是你所要求的。除非您还只想匹配一个字符(不是 2 个或更多),在这种情况下您是对的:/[YMD]+/

标签: regex


【解决方案1】:

YMD 连续出现两个或多个(例如,MYDDYD)?

/[YMD]{2,}/

Refiddle example


或者您的意思是这些单个字母中的任何一个连续出现两次或更多次(即YYMMDD)?

/Y{2,}|M{2,}|D{2,}/

您还可以通过lookaheadbackreference 获得一点花哨:

# one of [YMD] followed by another one of whichever letter matched

/([YMD])(?=\1)/

【讨论】:

  • 我如何说 YMD 后跟任意数量的 [YMD]?
  • @GregH Literal YMD 后跟任何 YMD 字符(包括没有?)?试试/YMD[YMD]*/
【解决方案2】:

我不会被与日期格式匹配的相似性所误导,当字符串包含任意顺序的 Y 和 M 和 D 时,我将带您了解您想要匹配的单词。

这个:'(?=.*M)(?=.*Y)(?=.*D)'

使用积极的前瞻断言。

【讨论】:

  • 您能否在此处提供评论,说明此正则表达式的工作原理?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 2018-07-07
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
相关资源
最近更新 更多