Regex 由最大N个字分隔的子字符串的正则表达式匹配

Regex 由最大N个字分隔的子字符串的正则表达式匹配,regex,Regex,我在谷歌上做了大量搜索,但找不到有效的表达方式。我的意思是匹配这个元表达式: Blah Blah Blah, I'm looking for [max N words] player 换句话说,我需要匹配: Even these days I'm looking for a couple of players I'm looking for an experienced player I'm looking here and there to find a good player <-

我在谷歌上做了大量搜索,但找不到有效的表达方式。我的意思是匹配这个元表达式:

Blah Blah Blah, I'm looking for [max N words] player
换句话说,我需要匹配:

Even these days I'm looking for a couple of players
I'm looking for an experienced player
I'm looking here and there to find a good player  <--- Must not match!
I'm looking for a player
即使是现在,我也在寻找一些球员
我在找一个有经验的球员

我到处寻找一个好球员这是你想要的吗

.*(I'm looking for) (.*) (player{1}s?)

我在一些台词上看到了你们有球员和其他球员,正如阿维纳什所说的,你们也想和第三行比赛吗


您可以在捕获组$2中捕获您要查找的单词。或者您可以将?=添加到其他组中,使其不被捕获。

如果您想捕获其中的内容,可以使用如下正则表达式:

(?<=looking for)(.*)(?=player)
顺便说一句,如果你不想使用lookarounds,你可以简单地使用:

looking for(.*)player
另一方面,由于示例3在此处包含
以上的正则表达式将不匹配,因此如果您也要包含该正则表达式,可以使用以下正则表达式:

looking (?:for|here)(.*)player
我会:

(?<=looking for)(?:\s+\S+){1,5}\s+(?=\player)

(?详细信息将取决于您使用的正则表达式风格。对于支持它的正则表达式,您可以搜索表达式的1-N个实例,使用
{1,N}
格式。例如,使用此测试文件:

即使是现在,我也在寻找一些球员
我在找一个有经验的球员
我到处找,想找一个好球员
我在找一个球员
我在这里找的字太多了,应该和玩家不匹配
使用GNU
grep
进行说明,最多3个:

  • 基本正则表达式(BRE)
  • $grep-o“我正在寻找\([^[:blank:][]*\)\{1,3\}个玩家*”文件
    我在找几个球员
    我在找一个有经验的球员
    我在找一个球员
    
  • 扩展正则表达式(ERE):
  • $grep-oE“我正在寻找([^\s]*){1,3}玩家*”文件
    我在找几个球员
    我在找一个有经验的球员
    我在找一个球员
    
    为什么要匹配第3行?它对
    @M42没有
    。是的,它在PCREs中不是量词,但我没有使用PCREs。虽然在和的POSIX规范中不明确允许它,但它也不被禁止,并且在我熟悉的实现中也能工作。无论如何,为了以防万一,我改为
    {1,N}
    (?<=looking for)(?:\s+\S+){1,5}\s+(?=\player)