使用正则表达式在第一场比赛时停止

时间:2012-07-17 09:41:10

标签: regex

这是一个经常重复的问题,但不知怎的,我没有发现以前的答案完全符合我的要求。有一个字符串

  

我的名字是Pavan。我是个好孩子吗?

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

a

将匹配字符串中存在的所有四个a。我搜索过的所有其他帖子都建议使用非贪婪的匹配?。但是a+?并没有解决这个问题,因为即使是非贪婪的比赛也会重复4次。

那么我怎么能告诉正则表达式引擎在第一场比赛后很快停止?

我可能会问一个非常微不足道的问题,但是当我刚开始使用正则表达式时,请耐心等待。

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

GSkinner

RegexPal

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

2 个答案:

答案 0 :(得分:3)

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

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

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

在Python中有re.searchre.findall

答案 1 :(得分:0)

在这种特殊情况下:

^[^a]*(a)

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