如何减少正则表达式的长度

How to reduce the length of regular expression

我正在使用以下正则表达式,我需要在保持相同行为的同时减少其长度。

^\s*(John|Matt|Oliver|Tom)\s*(\|\s*(John|Matt|Oliver|Tom)\s*)*$

表达式验证“|”特定名称的分隔列表。

由于您有 PCRE 正则表达式,请使用 subroutine call (?1) 以免重复整个第 1 组子模式:

^\s*(John|Matt|Oliver|Tom)\s*(\|\s*(?1)\s*)*$
                                   ^^^^

参见regex demo