如何编写一个正则表达式,它将至少返回包含一系列字母(如abcd)的所有单词(除了所需的子序列之外还可能包含其他字母)?
abcd必须是单词的后续部分。
谢谢!
P.S。用于lex
%{
%}
delim [ \t\n]
ws {delim}+
lc [a-z]
%%
{ws} {/* no action taken */}
(?={lc}*a)(?={lc}*b)(?={lc}*c)(?={lc}*d) { /* some code */ }
%%
答案 0 :(得分:4)
使用前瞻来检查单词中所有字母是否存在的简单模式:
\b(?=\w*a)(?=\w*b)(?=\w*c)(?=\w*d)\w+\b
如果你想验证这个词,而不是捕获,你可能想要^...$
而不是\b...\b
,你可能想要将\w
更改为您可接受的字母。
每个(?=\w*a)
令牌都是前瞻 - 它检查前面有字母和a
,但它没有前进 - 下一个条件b
从一开始就被检查再次。在我们检查了所有字母之后,最后\w+
实际捕获了该字。
答案 1 :(得分:0)
\b\w*abcd\w*\b
此正则表达式匹配包含abcd
字符序列的所有单词..
答案 2 :(得分:0)
如果a
,b
,c
和d
必须按此顺序出现,则采用以下模式
将匹配:
{lc}*a{lc}*b{lc}*c{lc}*d{lc}* { /* some code */ }
如果没有这样的订单限制,当 Kobi 回答时,前瞻将是 需要。 虽然flex有 trailing context,有limitations, 并且不会满足复杂的前瞻目的。