1

这是一个经常重复的问题,但不知何故,我没有找到与我的要求完全匹配的先前答案。有一个字符串

我叫帕万。我是个好孩子吗?

我只想匹配a上面字符串中第一次出现的字符(不管它是否在单词边界)。最简单的正则表达式

a

a将匹配字符串中存在的所有四个s。我在 SO 上搜索的所有其他帖子都建议使用 non-greedy match ?。但这a+?并不能解决这里的问题,因为即使是非贪婪匹配也会重复 4 次。

那么我该如何告诉正则表达式引擎在第一场比赛后立即停止呢?

我可能问了一个非常琐碎的问题,但请耐心等待,因为我刚刚开始使用正则表达式。

PS:我正在使用以下2个引擎来验证我的结果

斯金纳

正则表达式

我没有使用任何特定语言,只是使用上述工具进行匹配

4

2 回答 2

3

您将正则表达式语言中的量词与您的语言/框架为您提供的工具混淆了。通常有一种方法可以返回所有匹配项,另一种方法只返回第一个匹配项(还有一个只检查正则表达式是否匹配)。

在 .NETRegex.Matches中查找所有匹配项,Regex.Match仅查找第一个匹配项,您可以使用Regex.IsMatch它来确定正则表达式是否匹配。

在 Java 中,您可以使用Matcher.find查找第一个匹配项或迭代查找所有项。

在 Python 中有re.searchre.findall

于 2012-07-17T09:43:43.937 回答
0

在这种特殊情况下:

^[^a]*(a)

但是大多数正则表达式实现都有一个只返回第一个匹配项的函数。

于 2012-07-17T09:44:19.507 回答