我正在开发一个小项目,并且需要正则表达式,它接受包含给定字母表中每个字符的字符串至少一次.
因此,对于字母表,{J, K, L}我需要一个RegEx,它接受包含J一次或多次AND和K一次或多次的字符串L,以及任何顺序的一次或多次,其中包含之前,之后或之间的任何数量的重复字符.
我对RegEx缺乏经验,所以很难找到许多问题的"横向思维"解决方案.因此,我的第一个方法就是相当暴力:我拿了每个可能的"基础"字符串,例如,
JKL, JLK, KJL, KLJ, LKJ, LJK
并允许任何可以从其中一个起点构建的字符串.然而,由此产生的正则表达式*(尽管有效)最终会很长并且包含大量冗余.更不用说一旦字母表中有多个字符,这种方法就变得完全站不住脚了.
我花了几个小时试图找到一个更优雅的方法,但我还没有找到一个仍然接受所有可能的字符串.是否有一种方法或技术可以用更优雅和可扩展的方式(更大的字母表)来完成这项工作?
*作为参考,我列出的例子的正则表达式:
((J|K|L)*J(J|K|L)*K(J|K|L)*L(J|K|L)*)|
((J|K|L)*J(J|K|L)*L(J|K|L)*K(J|K|L)*)|
((J|K|L)*K(J|K|L)*J(J|K|L)*L(J|K|L)*)|
((J|K|L)*K(J|K|L)*L(J|K|L)*J(J|K|L)*)|
((J|K|L)*L(J|K|L)*J(J|K|L)*K(J|K|L)*)|
((J|K|L)*L(J|K|L)*K(J|K|L)*J(J|K|L)*)
Run Code Online (Sandbox Code Playgroud)
这是前瞻性的典型用例.您可以简单地^(?=[^J]*J)(?=[^K]*K)(?=[^L]*L)用来检查所有条件.如果您的字符串也必须只包含这些字符,您可以附加[JKL]+$到它.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |