我有一个类似于abcd
的字符串,但a
的位置未知。字符串可以是bacd
或bcad
或bcda
。
我试过
a{0,1}ba{0,1}ca{0,1}da{0,1}
但此模式也匹配bcd
。
我需要恰好出现一次a
的未知位置。
a
是一个符号。我希望像b[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]
一样使用......而不是a
。
答案 0 :(得分:1)
您的标准似乎是:
bcd
全部按此顺序出现a
出现在任何地方(" a"是复杂表达式的占位符)这样做:
^(?!bcd$)(?!(.*a){2})(a)?b(a)?c(a)?d(a)?$
请参阅live demo。
预测确保只有一个a
和" a"可以是一个完整的表达。
另请注意使用?
代替{0,1}
。
答案 1 :(得分:1)
简短回答
ABCD | BACD | BCAD | BCDA
完全可读,性能良好,无处不在。
更长的答案。
不应过于使用正则表达式。它是一个状态机,如果你把它变得太复杂就会运行缓慢。
当你需要一个小功能的时候,写下那个功能。
一个?BA?CA的γda? - 使用跟进功能来计算a的数量。
答案 2 :(得分:-1)
这个答案建立在Dennis Cheung的答案之上,用java
写的(你没有指定语言)
string.replaceAll("a", "").matches("bcd") &&
string.replaceAll("[^a]", "").equals("a") &&
string.matches("a?ba?ca?da?")