简单的正则表达式反转中间字符

时间:2016-04-05 17:27:06

标签: regex

如果我有代码:

ex(?!a)

将匹配exi exu exo等...但不是exa。

但是为什么当我使用这段代码时:

ex(?!a)plasma

它不会与explasma或exoplasma相匹配?为什么?

我希望匹配任何 ex [X]血浆格式,其中 [X] 是除“a”之外的任何字符。代码有什么问题?

4 个答案:

答案 0 :(得分:2)

基于http://www.regular-expressions.info/lookaround.html的以下文档:

  

“lookaround”,是零长度断言,就像行的开头和结尾,以及本教程前面解释的单词锚点的开始和结束。区别在于环视实际匹配字符,但随后放弃匹配。

它们不消耗字符串中的字符,但仅断言是否可以匹配。如果你想匹配除特殊字符以外的任何字符,你可以使用否定字符类:

ex[^a]plasma

答案 1 :(得分:1)

您需要使用:

ex(?!a).plasma

其中dot匹配负前瞻后的任何字符。

或者简单地说:

ex[^a]plasma

[^a]匹配a以外的任何字符。

RegEx Demo

答案 2 :(得分:1)

因为零宽度断言不会移动正则表达式引擎的位置(因此名称)。

你的意思是

ex(?!a).plasma

注意点。这会将位置向前移动一个字符,匹配“不是a”。

同样,ex(?!a)"ex"中的"exo"相匹配,但与整个"exo"不匹配。

答案 3 :(得分:1)

首先让我们看看你在ex(?!a)做了些什么。你说的是。

  

按字面匹配ex,如果a不存在则向前看。

您正在说ex(?!a)plasma

  

按字面匹配ex,如果a不存在则向前看。如果没有,则匹配plasma

在其中任何一个中,您都没有提到在ex之后匹配任何内容。要在ex之后匹配任何字母,您必须在。之后使用字符类[a-z]

尝试使用此正则表达式:ex(?!a)[a-z]plasma

这将匹配exiplasmaexoplasma,但不是 exaplasma

<强> Regex101 Demo