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}
格式。例如,使用此测试文件:
即使是现在,我也在寻找一些球员
我在找一个有经验的球员
我到处找,想找一个好球员
我在找一个球员
我在这里找的字太多了,应该和玩家不匹配
使用GNUgrep
进行说明,最多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)