复杂的正则表达式

时间:2014-07-03 07:05:02

标签: regex

您好我正在尝试找出以下字母的正则表达式,其中字母表由' a''''''''' 39; d':

' a'''' c'' d'只要' d'永远不会跟着(' d' |' a')和' b'永远不会跟着(' b' |' c')。任何帮助都会很棒!谢谢。

编辑:让我最接近的是(a | b?| c | d?)*但是这并没有考虑到这样一个事实:' d'不能跟着' a'和' b'不能跟着' c'。

1 个答案:

答案 0 :(得分:4)

将问题分解为其组成部分:

' a'''' c'' d'是可以接受的

这将是一个简单的表达式:

[abcd]

但是,鉴于对字符d和b的额外限制,这将成为:

[ac]

d后面没有d或

这可以通过简单的negative lookahead

来实现
d(?![da])

b后面没有b或c

这与前一个字符匹配略有不同:

b(?![bc])

一起添加

完整的单字符正则表达式因此变为:

[ac]|d(?![da])|b(?![bc])

或者作为完整的表达:

/^([ac]|d(?![da])|b(?![bc]))+$/