关于正则表达式的一些事情

时间:2013-02-11 03:06:44

标签: c++ regex

我在解决此问题时遇到了问题:http://regexone.com/lesson/13

我尝试做的事情如下:(\d+x\d+)

但为什么它不起作用?我们如何使用“分组”呢?谢谢!

input text  required capturing group result
1280x720    1280, 720
1920x1600   1920, 1600
1024x768    1024, 768

3 个答案:

答案 0 :(得分:1)

捕获组被括号()包围。

在正则表达式(\d+x\d+)中,有一个捕获组 - 整个\d+x\d+,因为整个正则表达式都被捕获组包围。

特别是在那个问题中,你想得到两个单独的数字。因此,一个组应“捕获”一个数字而另一个组“捕获”另一个数字。

因此,对于第一组,您将仅捕获第一个数字(字符序列) - (\d+)。同样如此。

此外,您不需要x,因此您可以将其置于任何捕获组之外。

因此,(\d+)x(\d+)就是你想要的。

答案 1 :(得分:1)

练习是关于捕捉群组。要求是分别捕获两个数字序列,并跳过x,如下所示:

(\d+)x(\d+)

另一方面,您的解决方案将整个输入捕获到由括号表示的单个捕获组中。

当您需要处理正则表达式捕获的输入的各个部分时,捕获组的概念非常重要,而不是处理整个捕获。在链接的示例中,您可以获取分辨率的水平分量的第一组,以及分辨率的垂直分量的第二组。如果没有两个单独的捕获组,您需要在代码中找到x,然后再进行拆分。

答案 2 :(得分:1)

您需要匹配两个特定内容 - x和y分辨率。这意味着,您需要两个小组。

所以,你知道你需要:()()

您不希望捕获的x和x位于您想捕获的内容之间: ()x()

最后,我们需要填写我们正在搜索的内容。我们希望一个或多个(+)数字(\ d)。因此,完成的正则表达式是:

(\d+)x(\d+)