我正在寻找一种比我现在拥有的更有效的正则表达式。基本上我的名字可以写成不同的。交替由
%
(百分号)分隔,并由 #
(井号)分隔,这样名称可以是:
#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)#.*?#.*?#.*?#.*?#.*
但是就像前面提到的,我正在寻找一种更有效的方法来做到这一点。 有任何想法吗? 谢谢!
一般来说,通过消除所有可能的回溯可以获得最佳结果。
这将其减少到只有一个位置:
^
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
[%#]