Regex 重复值的正则表达式

Regex 重复值的正则表达式,regex,Regex,我试图找到正确的正则表达式(用于Java和JavaScript)来验证一个星期一和24小时时间格式的数组。我算出了时间格式,但正在努力想出完整的解决方案 正则表达式需要验证包含以下一个或多个模式的模式,这些模式用逗号分隔 {两字符日}HH:MM-HH:MM 有效字符串的三个示例如下: M 5:30-7:00 M 5:30-7:00, T 5:30-7:00, W 18:00-19:30 F 12:00-14:30, Sa 6:45-8:15, Su 6:45-8:15 你可以试试这个 [A-Z

我试图找到正确的正则表达式(用于Java和JavaScript)来验证一个星期一和24小时时间格式的数组。我算出了时间格式,但正在努力想出完整的解决方案

正则表达式需要验证包含以下一个或多个模式的模式,这些模式用逗号分隔

{两字符日}HH:MM-HH:MM

有效字符串的三个示例如下:

M 5:30-7:00
M 5:30-7:00, T 5:30-7:00, W 18:00-19:30
F 12:00-14:30, Sa 6:45-8:15, Su 6:45-8:15
你可以试试这个

[A-Za-z]{1,2}[ ]\d+:\d+-\d+:\d+

这应该可以做到:

^(M|Tu|W|Th|F|Sa|Su) \d{1,2}:\d{2}-\d{1,2}:\d{2}(, (M|Tu|W|Th|F|Sa|Su) \d{1,2}:\d{2}-\d{1,2}:\d{2})*$

请注意,您在上面的示例中显示的
T
不明确。您可能需要强制执行
Tu
Th
,如我的正则表达式所示。

这将捕获数组中的所有集合。短期工作日列表中的T是有争议的(星期二或星期四?)

(:)是非捕获组,因此您的实际匹配将是(例如):

  • M 5:30-7:00
  • T 5:30-7:00
  • W 18:00-19:30
但整条线路都将得到验证


为行边界和显式时间匹配添加了“^”和“$”,因为某些正则表达式解析器可能无法使用我以前使用的方式工作。

这应该验证24小时时间:

/^((M|T|W|Th|Fr|Sa|Su) ([01]?[0-9]|2[0-3]):[0-5][0-9]-([01]?[0-9]|2[0-3]):[0-5][0-9](, )?)+$/
时间位的功劳归在mkyong上:

你可以试试这个:
([MTWFS][ouehra]?)([0-9]|[1-2][0-9]):([0-6][0-9])-([0-9]|[1-2][0-9]):([0-6][0-9])
我同意这一点:

(((M|T(u|h)|W|F|S(a|u)) ((1*\d)|(2[0-3])):[1-5]\d-((1*\d)|(2[0-3])):[1-5]\d(, )?)+

展示你所尝试过的,你会说HH:MM,但你会允许一个位数的小时吗?e、 g.06或6您是说您不知道如何确保字符串只包含一种或多种由逗号分隔的格式?这是否意味着正则表达式也应该验证类似
M5:30-7:00,W5:30-7:00:30的内容?是的,读取这个字符串的现有代码有点模糊,需要同时支持一位数和两位数的小时。你需要匹配一个或两个数字表示小时,两个数字表示分钟。
{1,2}
我想,而不是
{1:2}
。我想如果你只是在寻找匹配的组,那么分隔符可以是任何东西——但这一点很好!已添加,但不在捕获的组中。@您对
^$
的看法是正确的,但是
\d+
将允许使用一个或多个我认为不可取的数字
(((M|T(u|h)|W|F|S(a|u)) ((1*\d)|(2[0-3])):[1-5]\d-((1*\d)|(2[0-3])):[1-5]\d(, )?)+