如何只匹配一个角色的单个实例?

时间:2015-05-18 04:32:38

标签: regex

不太确定如何解决这个问题,但基本上我要做的就是匹配一个角色,例如a。在这种情况下,以下所有内容都不会包含匹配项(即我不想匹配它们):

  • aa
  • aaa
  • fooaaxyz

以下是:

  • a(显然)
  • fooaxyz(这只会与字母匹配)

我对RegEx的了解不是很好,所以我甚至不确定这是否可行。基本上我想要做的就是匹配任何单个a周围有任何其他非a字符(除了字符串的开头和结尾)。

3 个答案:

答案 0 :(得分:3)

  

基本上我想做的是匹配任何一个周围没有任何其他非字符的字符(除了字符串的开头和结尾)。

^[^\sa]*\Ka(?=[^\sa]*$)

DEMO

\K会丢弃先前匹配的字符,并且先行断言是否可以匹配匹配。所以上面只匹配满足条件的字母a

a{2,}(*SKIP)(*F)|a

DEMO

答案 1 :(得分:1)

你需要两件事:

  • 否定字符类:[^a] (除了" a"所有
  • 锚点(^$)以确保达到字符串的限制(换句话说,模式匹配整个字符串而不仅仅是子字符串):

结果:

^[^a]*a[^a]*$

一旦您知道只有一个" a",您可以根据您使用的语言使用您想要的方式来提取/替换/删除它。

答案 2 :(得分:1)

您可以结合使用先行查找和先行查找

(?<!a)a(?!a)

请参见regex demo和正则表达式图:

enter image description here

详细信息

  • (?<!a)-如果在当前位置的左侧紧邻有a字符
  • ,则负向后搜索将使匹配失败
  • a-一个a字符
  • (?!a)-如果在当前位置的右侧紧邻有一个a字符,则负匹配将使匹配失败。