我将测试一个日期字符串,看它是否是这三个中的一个: dd-mm-yyyy或yyyy OR dd-mm-yyyy / dd-mm-yyyy
我已将这三个结合起来,但最后一个会造成麻烦,因为我不能只使用\ Q / \ E来匹配单个“/”。
[0-9]{2}-[0-9]{2}-[0-9]{4} -> dd-mm-yyyy
[0-9]{4} -> yyyy
[0-9]{2}-[0-9]{2}-[0-9]{4}\Q/\E[0-9]{2}-[0-9]{2}-[0-9]{4} -> dd-mm-yyyy/dd-mm-yyyy
他们将结合使用这个表达式:
([0-9]{2}-[0-9]{2}-[0-9]{4}|[0-9]{4}|[0-9]{2}-[0-9]{2}-[0-9]{4}\Q/\E[0-9]{2}-[0-9]{2}-[0-9]{4})
问题1:如何在日期之间只允许一个“/”?
问题2:在正则表达式和$结尾处,^意味着什么?而且应该 我有它在我的
溴。安德斯
更新:(基于下面的答案和评论)谢谢!两个正确答案。我标记了最后一个,因为还有一个更平滑的方式来写我试图做的事情。
语言可能是XSLT或C#。我在CMS Umbraco中放置了一个正则表达式来验证默认的texstring / input字段。
它有点滑稽。如果我在开头添加^,则没有区别,因此我的问题就是这个。
此字符串有效:^(?:\ d {4} | \ d {2} - \ d {2} - \ d {4}(?:/ \ d {2} - \ d {2} - ?\ d {4}))$
答案 0 :(得分:1)
如果您告诉我们您正在使用哪种正则表达式变体或编程语言,这将有所帮助。我现在假设perl。
\
)将其转义:\/
。^
表示输入的开始,$
表示结束。使用两种方法匹配与我的查询完全匹配的行,在开头或结尾没有其他内容。由于您要匹配日期字符串,而不是字符串中包含日期,因此应在查询中使用它们答案 1 :(得分:1)
由于您没有指定语言,我建议使用Perl版本:
/^(?:\d{4}|\d{2}-\d{2}-\d{4}(?:\/\d{2}-\d{2}-\d{4})?)$/
模式解释:
\d{4}
)two digits dash two digits dash four digits
a slash two digits dash two digits dash four digits
我引用了文字/
编写\/
,因为它是最常用的跨语言方式:在Perl中,选择不同的模式分隔符就足以避免转义。