正则表达式 - 未知的角色

时间:2015-11-29 06:18:45

标签: regex

我有一个类似于abcd的字符串,但a的位置未知。字符串可以是bacdbcadbcda

我试过

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

3 个答案:

答案 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?")