这是一个经常重复的问题,但不知怎的,我没有发现以前的答案完全符合我的要求。有一个字符串
我的名字是Pavan。我是个好孩子吗?
我想只匹配上面字符串中第一次出现的字符a
(不管它是否在字边界处)。最简单的正则表达式
a
将匹配字符串中存在的所有四个a
。我搜索过的所有其他帖子都建议使用非贪婪的匹配?
。但是a+?
并没有解决这个问题,因为即使是非贪婪的比赛也会重复4次。
那么我怎么能告诉正则表达式引擎在第一场比赛后很快停止?
我可能会问一个非常微不足道的问题,但是当我刚开始使用正则表达式时,请耐心等待。
PS:我使用以下2个引擎来验证我的结果
我没有使用任何特定语言,只是使用上述工具来执行匹配
答案 0 :(得分:3)
您正在将正则表达式语言中的量词与您的语言/框架为您提供的工具混淆。通常有一个方法可以返回所有匹配,另一个只返回第一个匹配(并且只检查正则表达式是否匹配)。
在.NET中Regex.Matches
找到所有匹配项,Regex.Match
找到第一个匹配项,您可以使用Regex.IsMatch
来确定正则表达式是否匹配。
在Java中,您可以使用Matcher.find
查找第一个匹配项或迭代查找所有匹配项。
在Python中有re.search
和re.findall
。
答案 1 :(得分:0)
在这种特殊情况下:
^[^a]*(a)
但是大多数正则表达式实现都有一个只返回第一个匹配的函数。