我应该在字母{A,B,... Z}上设计一个包含至少一个D的正则表达式,并且每次出现的OO都必须遵循(不一定是立即) L.所以这样的行:
不要吃掉它
会被接受。我被告知这是非常棘手的,而且我在单词之间的空格方面遇到了很多困难。
到目前为止我所拥有的是:
(?=[A-CE-Z]*D)(.*?OO(?=[A-KM-Z]*L)
任何帮助都会很棒!
谢谢!
答案 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
答案 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”.*
抓住一切通过所有条件