Regex 如何仅匹配角色的单个实例?

Regex 如何仅匹配角色的单个实例?,regex,Regex,不太清楚如何进行,但基本上我想做的是匹配一个字符,比如说a。在这种情况下,以下所有内容都不包含匹配项(即,我不想匹配它们): aa aaa fooaaxyz 鉴于以下情况: a(显然) fooaxyz(仅与字母a部分匹配) 我对正则表达式的了解不是很深,所以我甚至不确定这是否可行。基本上,我要做的是匹配任何一个a字符,该字符周围有任何其他非a字符(字符串的开头和结尾除外) 基本上,我想做的是匹配任何一个a,它周围有任何其他非a字符(除了字符串的开头和结尾) \K丢弃先前匹配的字符,并先

不太清楚如何进行,但基本上我想做的是匹配一个字符,比如说
a
。在这种情况下,以下所有内容都不包含匹配项(即,我不想匹配它们):

  • aa
  • aaa
  • fooaaxyz
鉴于以下情况:

  • a
    (显然)
  • fooaxyz
    (仅与字母a部分匹配)
我对正则表达式的了解不是很深,所以我甚至不确定这是否可行。基本上,我要做的是匹配任何一个
a
字符,该字符周围有任何其他非
a
字符(字符串的开头和结尾除外)

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

\K
丢弃先前匹配的字符,并先行判断是否可能匹配。因此,上面只匹配满足条件的字母
a

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

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

\K
丢弃先前匹配的字符,并先行判断是否可能匹配。因此,上面只匹配满足条件的字母
a

a{2,}(*SKIP)(*F)|a
你需要两件事:

  • 求反字符类:
    [^a]
    (除“a”之外的所有字符)
  • 锚定(
    ^
    $
    )以确保达到字符串的限制(换句话说,模式匹配整个字符串,而不仅仅是子字符串):
结果:

^[^a]*a[^a]*$
一旦你知道只有一个“a”,你就可以根据你使用的语言使用你想要的方式来提取/替换/删除它。

你需要两件事:

  • 求反字符类:
    [^a]
    (除“a”之外的所有字符)
  • 锚定(
    ^
    $
    )以确保达到字符串的限制(换句话说,模式匹配整个字符串,而不仅仅是子字符串):
结果:

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

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

你可以结合使用“向后看”和“向前看”:

(?<!a)a(?!a)
(?
请参见和正则表达式图:

详细信息

  • (?-如果在当前位置的左侧有一个
    a
    char,则会导致匹配失败的反向查找
  • a
    -一个
    a
    字符
  • (?!a)
    -如果在当前位置的右侧有一个
    a
    字符,则会导致匹配失败的负前瞻

您可以结合使用前向和后向:

(?<!a)a(?!a)
(?
请参见和正则表达式图:

详细信息

  • (?-如果在当前位置的左侧有一个
    a
    char,则会导致匹配失败的反向查找
  • a
    -一个
    a
    字符
  • (?!a)
    -如果在当前位置的右侧有一个
    a
    字符,则会导致匹配失败的负前瞻

您运行的语言是哪个?abaco应该匹配,对吗?abaco应该匹配两者还是根本不匹配?您运行的语言是哪个?abaco应该匹配,对吗?abaco应该匹配两者还是根本不匹配?或者
^[^a]*\Ka(?=[^a]*$)
从他的例子中,我不确定同一个单词中不相交的a是否应该匹配2'a's或其他,或者
a{2,}(*SKIP)(*F)|a
,,.Donno op到底想要什么,所以我提供了两者。这几乎是完美的,但我希望能够在一行上匹配它(我认为我在问题中使用的要点可能令人困惑)。例如,
babbbab
应该匹配两次。java不支持此属性,因此您可以使用此属性。从组索引1获取所需的
a
。或者使用基于负环视的正则表达式或
^[^a]*\Ka(?=[^a]*$)
从他的示例中,我不确定同一单词中不相交的“a”是否应该匹配2“a”或“a”{code>a{2,}(*SKIP)(*F)| a
,.Donno op到底想要什么,所以我提供了两者。这几乎是完美的,但我希望能够在一行上匹配它(我想我在问题中使用的要点可能会让人困惑)。例如,
babbbab
应该匹配两次。java不支持此属性,因此您可以使用此属性。从组索引1中获取所需的
a
。或者使用基于负环视的正则表达式