Gri*_*yan 2 regex string regex-negation
我需要编写一个正则表达式,它匹配表示逗号分隔的星期几的字符串,如:
"Sun,Mon,Tue,Wed,Thu,Fri,Sat"
Run Code Online (Sandbox Code Playgroud)
每天最多可以出现在字符串中一次.日期的顺序很重要.
到目前为止,我尝试了以下模式:
1) (Sun,|Mon,|Tue,|Wed,|Thu,|Fri,|Sat,)*(Sun|Mon|Tue|Wed|Thu|Fri|Sat)
这一个非常糟糕:允许多天存在,也不会看多天订单.
2) (Sun)?([,^]Mon)?([,^]Tue)?([,^]Wed)?([,^]Thu)?([,^]Fri)?([,^]Sat)?
这是我到目前为止最好的.这里唯一的问题是它匹配以逗号开头的字符串,例如,Mon,Tue,Fri.我的问题是如何过滤掉匹配此模式的逗号起始字符串.
提前致谢.
同意正则表达式可能不是最佳选择.但是,如果您当前版本的唯一问题是它匹配以逗号开头的字符串,您可以在正则表达式的开头处检查一个起始逗号:
(?!,)(Sun)?([,^]Mon)?([,^]Tue)?([,^]Wed)?([,^]Thu)?([,^]Fri)?([,^]Sat)?
Run Code Online (Sandbox Code Playgroud)
但是,我不认为[,^]你认为它做了什么 - 在我熟悉的正则表达式中,^方括号内部匹配文字^时它不是列表中的第一个字符 - 它与字符串的开头不匹配.您可以将其替换为(^|,):
(?!,)(Sun)?((^|,)Mon)?((^|,)Tue)?((^|,)Wed)?((^|,)Thu)?((^|,)Fri)?((^|,)Sat)?
Run Code Online (Sandbox Code Playgroud)