必须包含某些字母的字符串的正则表达式

时间:2013-11-29 02:29:22

标签: regex

我应该在字母{A,B,... Z}上设计一个包含至少一个D的正则表达式,并且每次出现的OO都必须遵循(不一定是立即) L.所以这样的行:

  

不要吃掉它

会被接受。我被告知这是非常棘手的,而且我在单词之间的空格方面遇到了很多困难。

到目前为止我所拥有的是:

(?=[A-CE-Z]*D)(.*?OO(?=[A-KM-Z]*L)

任何帮助都会很棒!

谢谢!

3 个答案:

答案 0 :(得分:3)

你可以试试这个基于前瞻性的正则表达式:

^(?=[ A-CE-Z]*D)(.*?OO(?=[^L]*L)|(?!.*?OO)[A-Z ])*$

说明:

  • (?=[ A-CE-Z]*D) ---确保输入中至少有D
  • (.*?OO(?=[^L]*L)|(?!.*?OO).) ---见下文
    • .*?OO(?=[^L]*L) ---如果OO在那里,则应该至少跟着L
    • (?!.*?OO). ---没有OO

enter image description here

答案 1 :(得分:0)

锚定前瞻是要走的路:

^(?=.*D)(?!.*OO[^L]*$)[A-Z ]*$

请注意,您不需要字符类[A-CE-Z]; .*很好(考虑一下,你应该明白为什么)。

查看此正则表达式的live demo

答案 2 :(得分:0)

我喜欢将自己的群体中的条件分开,如此

^(?!.*[^\sA-Z])(?=.*D)((?=.*OO.*L)|(?!.*OO)).*$

  • (?!.*[^\sA-Z])除了字母和空格外没有任何其他内容
  • (?=.*D)至少包含一个“D”
  • ((?=.*OO.*L)|(?!.*OO))如果它包含“OO”,则必须后跟“L”或看不到“OO”
  • .*抓住一切通过所有条件