使用Regex只捕获模式的第一个匹配项

时间:2017-08-29 21:13:14

标签: regex

我一直在寻找这个问题的答案,但我没有得到明确的答案。

我有文字:

  

MSI GeForce GTX 1080 Ti DirectX 12 GeForce GTX 1080 Ti GAMING X 11G

我正在使用正则表达式

GTX +?\d+

返回结果GTX 1080两次

我想只抓一场比赛然后退场。

是否有正则表达式会这样做?或者我是否需要将正则表达式框架用于我正在使用的语言?

2 个答案:

答案 0 :(得分:2)

这只能抓住一场比赛并退场。为了清楚起见,它抓住了最后一场比赛,但它完成了你想要它做的事情。在regex101.com上测试

GTX +?\d+(?!.*GTX +?\d+.*$)

答案 1 :(得分:2)

@Tezra提出的方法应该有效,除了最后的$标记可能是不必要的(它可能取决于你正在使用的正则表达式的风格)。 (GTX \d+)[\s\S]* DEMO

此方法会将您的第一个匹配项隔离到一个捕获组中,您可以使用您选择的语言检索该捕获组。你没有指定一个,所以我就把它留在那里。 以下是第二种方法的内容:

查询(GTX \d+)周围的括号将其放入第一个(也是唯一的)捕获组。

跟随[\s\S]的括号内的组将匹配集合中的任何单个字符。由于所有字符必须是空格(\s)或不是空格(\S),因此结果就是任何内容。

最后,最后的*量词将匹配前一组中的零个或多个连续字符,确保消耗掉字符串的剩余部分。

希望这有帮助。