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