我不是regex专家,所以请友好点:)
我创建了这个regex来验证用户是否提交了一周中的某一天(意大利语):
/((lun|mart|giov)e|mercol(e?)|vener)d(ì|i('?)|í)|sabato|domenica/这个regex 完美地工作了,它匹配以下内容:
现在考虑regex的第一部分,关注venerdì:正如您所看到的,我添加了一个OR (|),仅仅是为了管理venerdì日,仅仅是因为“r”的存在。
任何事情都能正常工作,但我想问的是,是否有任何方法可以以这种方式启动正则表达式:
(lun|mar|giov|ven)e然后用某种方式管理“r”。
我对backrefences和conditionals很感兴趣,但我不确定他们能帮上什么忙。
我的想法是:“如果第一组捕获‘ven’,那么在组结束后添加”r“到”e“。
这个是可能的吗?
发布于 2019-08-28 08:28:15
不要“高尔夫”你的领地。如果你想改进它,让它更加可读性。虽然对于不同的"i“变体使用不同的情况当然是有价值的,但是其他的一切都应该尽可能的简单。
像这样的怎么样?
(lune|marte|mercole?|giove|vener)d(ì|i'?|í)|sabato|domenica如果你不需要的话,不要使用反向引用和其他高级特性,只是为了缩短你的正则表达式。即使你仍然理解这意味着什么,想想你的同事--或者仅仅是你自己--两个月后。
我刚刚删除了一些多余的(...)和“共享e”部分。注意(除了(...)),无论您使用(lun|mart|giov)e还是lune|marte|giove,它都是相同的长度,但是后者可以说是更易读的。类似地,反向引用或某些条件可能会使正则表达式更长,而不是更短--而且要复杂得多。
https://stackoverflow.com/questions/57687738
复制相似问题