更高效的正则表达式用于交替

问题描述 投票:0回答:1

我正在寻找一种比我现在拥有的更有效的正则表达式。基本上我的名字可以写成不同的。交替由

%
(百分号)分隔,并由
#
(井号)分隔,这样名称可以是:

#name#
#name#name1#
#name#name1%name2#
#name#name1%name2%name3#

依此类推,如下行所示:

name#Maria Pedroso%Maria Poderoso%Marta Camargo####1647#bati.#8#/pal:/MM9.3.1/TH-1-14087-48215-26##

我有这个有效的正则表达式:

^name#(marta pedroso|marta pedroso%.*?|.*?%marta pedroso%.*?|.*?%marta pedroso)#.*?#.*?#.*?#.*?#.*

但是就像前面提到的,我正在寻找一种更有效的方法来做到这一点。 有任何想法吗? 谢谢!

regex perl grep
1个回答
0
投票

一般来说,通过消除所有可能的回溯可以获得最佳结果。

这将其减少到只有一个位置:

^
name
\#
(?: [^#%]*+ % )*      # This can still backtrack, but it's quite limited.
marta [ ] pedroso
(?: % [^#%]*+ )*+
(?: \# [^#]*+ ){5}

这是一个验证正则表达式吗?如果是这样,您就不需要所有那些尾随的东西。

^
name
\#
(?: [^#%]*+ % )*      # This can still backtrack, but it's quite limited.
marta [ ] pedroso
[%#]
© www.soinside.com 2019 - 2024. All rights reserved.