我需要搜索一个关键字,例如"abcdef",它也可以是缩写版本,末尾有一个点。所有有效的变体都是:
abcdef
abcde.
abcd.
abc.
ab.
a.
我对此有一个正则表达式,它很清楚:
abcdef|abcde.|abcd.|abc.|ab.|a.
关键字字符不重复的另一个正则表达式:
a(b(c(d(e(f|.)|.)|.)|.)|.)
我正在寻找一个更紧凑的表达式,甚至不会重复一个点。 我使用 .NET 语法。
您可以使用条件构造:
a(b(c(d(e(?<f>f)?)?)?)?)?(?(f)|.?)
请参阅正则表达式演示。在这里,(?<f>f)?
是一个可选的命名组匹配f
一次或零次。如果组匹配,则f
组不为空,(?(f)|.?)
匹配空字符串。如果为空,则.?
匹配可选.
。
在PCRE伪造中,可以使用
a(b(c(d(e(f(*ACCEPT))?)?)?)?)?.?
其中(*ACCEPT)
可选组中的动词将停止分析当前正则表达式并返回到目前为止匹配的值(因此如果找到f
,则不会尝试最后一个.?
(。看看这个正则表达式风格。
作为变体:a(bcdef|(bcde|bcd|bc|b|).)
短 2 个字母(稍短一点(:a(bcdef|(b(cde|cd|c|)|).)
短 3 个字母(长度相同(:a(bcdef|(b(c(de|d|)|)|).)
短 4 个字母最短 - 25 个符号:a(bcdef|(b(c(de?|)|)|).)