改进有效的正则表达式
Improve regex that works
我不是正则表达式专家,所以请保持友好:-)
我创建了这个正则表达式来验证用户是否提交了星期几(意大利语):
/((lun|mart|giov)e|mercol(e?)|vener)d(ì|i('?)|í)|sabato|domenica/
这个正则表达式 完美工作 并且它匹配以下内容:
- monedi
- monedì
- monedí
- monedi'
- martedi
- martedì
- martedí
- martedi'
- 周三编辑我
- 星期三edì
- 已婚已婚í
- 周三编辑我'
- 星期三
- 星期三
- 星期三
- 星期三
- 周四edi
- 周四edì
- 周四edí
- 星期四edi'
- 星期五erdi
- 星期五erdì
- 周五周五í
- 周五erd我'
- 星期六
- 周日
现在考虑 regex
的第一部分并关注 venerdì
:如您所见,我添加了一个 OR
(|
) 只是为了管理venerdì
天,就因为那个“r”的存在。
一切正常,但我想问一下是否有任何方法可以这样启动正则表达式:
(lun|mar|giov|ven)e
然后以某种方式管理那个“r”。
我对 backrefences
和 conditionals
很生气,但我不确定它们是否能提供任何帮助。
我的想法是这样的:“如果第一组捕获了'ven',则在该组结束后立即将“r”添加到“e”。
这可能吗?
不要 "golf" 你的正则表达式。如果你想改进它,让它更具可读性。虽然对于不同的 "i" 变体使用不同的案例当然是值得的,但恕我直言,其他一切都应该尽可能简单。
这样的怎么样?
(lune|marte|mercole?|giove|vener)d(ì|i'?|í)|sabato|domenica
如果您不需要反向引用和其他高级功能,请不要使用它们,只是为了让您的正则表达式更短几个字符。即使 你 仍然理解它的意思,想想你的共同开发者伙伴——或者两个月后的你自己。
我刚刚删除了一些多余的 (...)
和 "shared e" 部分。请注意(除了 (...)
)它是如何相同的长度,无论您使用 (lun|mart|giov)e
还是 lune|marte|giove
,但后者可以说更具可读性。同样,反向引用或某些条件可能会使您的正则表达式 更长 而不是更短 - 并且 相当 更复杂。
我不是正则表达式专家,所以请保持友好:-)
我创建了这个正则表达式来验证用户是否提交了星期几(意大利语):
/((lun|mart|giov)e|mercol(e?)|vener)d(ì|i('?)|í)|sabato|domenica/
这个正则表达式 完美工作 并且它匹配以下内容:
- monedi
- monedì
- monedí
- monedi'
- martedi
- martedì
- martedí
- martedi'
- 周三编辑我
- 星期三edì
- 已婚已婚í
- 周三编辑我'
- 星期三
- 星期三
- 星期三
- 星期三
- 周四edi
- 周四edì
- 周四edí
- 星期四edi'
- 星期五erdi
- 星期五erdì
- 周五周五í
- 周五erd我'
- 星期六
- 周日
现在考虑 regex
的第一部分并关注 venerdì
:如您所见,我添加了一个 OR
(|
) 只是为了管理venerdì
天,就因为那个“r”的存在。
一切正常,但我想问一下是否有任何方法可以这样启动正则表达式:
(lun|mar|giov|ven)e
然后以某种方式管理那个“r”。
我对 backrefences
和 conditionals
很生气,但我不确定它们是否能提供任何帮助。
我的想法是这样的:“如果第一组捕获了'ven',则在该组结束后立即将“r”添加到“e”。
这可能吗?
不要 "golf" 你的正则表达式。如果你想改进它,让它更具可读性。虽然对于不同的 "i" 变体使用不同的案例当然是值得的,但恕我直言,其他一切都应该尽可能简单。
这样的怎么样?
(lune|marte|mercole?|giove|vener)d(ì|i'?|í)|sabato|domenica
如果您不需要反向引用和其他高级功能,请不要使用它们,只是为了让您的正则表达式更短几个字符。即使 你 仍然理解它的意思,想想你的共同开发者伙伴——或者两个月后的你自己。
我刚刚删除了一些多余的 (...)
和 "shared e" 部分。请注意(除了 (...)
)它是如何相同的长度,无论您使用 (lun|mart|giov)e
还是 lune|marte|giove
,但后者可以说更具可读性。同样,反向引用或某些条件可能会使您的正则表达式 更长 而不是更短 - 并且 相当 更复杂。