1

我有一些如下所示的数据。

\\0101 \\0102 \\0103 \\0104
\\0201 \\0202 \\0203 \\0204 \\0205 \\0206
\\0301 \\0302 \\0303 \\0304 \\0305 \\0306

我需要始终获得最后\\一行之前的数字。

所以在上面几行中,我的输出应该是。

0103
0205
0305

我匹配这些数字,但它也匹配最后一组。

(?<=\\\\)\d+(?: \\\\\d+$)

除了这些数字,我如何排除其他所有内容?

4

3 回答 3

3

你很接近,而不是使用非捕获组(?:使用正向前瞻。

(?<=\\\\)\d+(?= +\\\\\d+$)

观看现场演示

于 2013-10-26T22:47:48.297 回答
3

There's a many ways to do that, but to correct your regex, just add a capturing group on the target digits

(?<=\\\\)(\d+)(?: \\\\\d+$)

Live DEMO

And another one (wich could be simplified more):

\\\\(\d+)\s+[\d\\]+$

Live DEMO

于 2013-10-26T23:06:38.253 回答
2

如果您的数据始终采用相同的形式,那么向后查找是无用的。你可以试试这个:

$subject = <<<'LOD'
\\0101 \\0102 \\0103 \\0104
\\0201 \\0202 \\0203 \\0204 \\0205 \\0206
\\0301 \\0302 \\0303 \\0304 \\0305 \\0306
LOD;

preg_match_all('~\d+(?=\D+\d+$)~m', $subject, $matches);

print_r($matches);
于 2013-10-27T00:48:55.437 回答