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

Regex 如何减少正则表达式的长度,regex,pcre,Regex,Pcre,我正在使用下面的正则表达式,我需要减少它的长度,同时保持相同的行为 ^\s*(John|Matt|Oliver|Tom)\s*(\|\s*(John|Matt|Oliver|Tom)\s*)*$ 表达式验证特定名称的“|”分隔列表 杜兰特 由于您有一个PCRE正则表达式,请使用(?1)以避免重复整个第1组子模式: ^\s*(John|Matt|Oliver|Tom)\s*(\|\s*(?1)\s*)*$ ^^^^ 请参阅

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

^\s*(John|Matt|Oliver|Tom)\s*(\|\s*(John|Matt|Oliver|Tom)\s*)*$
表达式验证特定名称的“|”分隔列表

  • 杜兰特

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

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

请参阅。

如果是PCRE,请使用
^\s*(John | Matt | Oliver | Tom)\s*(\\\s*(?1)\s*)*)*$
。如果是Ruby,
\A\s*(John | Matt | Oliver | Tom)\s*(\\\s*\g\s*)*\z
您没有指定语言,但可以使用一些代码为您插入分隔名称。根据您在中插入名称的方式,它可能会更短。无论如何都是未来的证明。Wiktor(?1)是我要找的。非常感谢。正则表达式在C中可以很好地工作,但是如果我在C中使用它,它就不能正常工作:(不,这个模式在C中永远不会工作,它只在PCRE(例如PHP)中工作。在C中,如果你使用
,你无论如何都不能“缩短”模式。将PCRE与C一起使用。