我有这个regex:
"(WORD1.*WORD2.*WORD3)|(WORD1.*WORD3.*WORD2)|(WORD2.*WORD1.*WORD3)|(WORD2.*WORD3.*WORD1)|(WORD3.*WORD1.*WORD2)|(WORD3.*WORD2.*WORD1)"
它与这些单词匹配:
WORD1WORD2WORD3
WORD1AWORD2BWORD3C
WORD3WORD1WORD2
WORD1WORD2WORD3WORD1
但不是这些话:
WORD1WORD1WORD2
WORD1AWORD1BWORD2C
当它找到一个字符串,其中有3个字(WORD1
,WORD2
,WORD3
)以任何顺序时,该正则表达式进行匹配。
我想对更多的单词做同样的事情,但问题是正则表达式的大小随着单词的数量呈指数级增长。有没有可能简化这个正则表达式的构造方式来解决这个问题(大小不会呈指数级增长)?
2条答案
按热度按时间qgelzfjb1#
只需迭代所有字符串,并过滤掉所有不包含所有关键字的字符串:
(更简洁的版本可以在下面的片段中找到)
试试看:
wn9m85ua2#
你可以对每个单词使用正向前看。
下面的更高性能版本指定了一个起始锚,并且在验证lookaheads后只匹配单个字符。根据OP的要求,此技术仅适用于
matching
,不适用于extraction
。