2013-10-26 148 views
1

我有一些如下所示的数据。匹配模式,排除其他所有内容

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

我需要总是得到最后一行\\之前的数字。

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

0103 
0205 
0305 

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

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

如何排除除这些数字以外的其他所有数据?

回答

3

您已经关闭,而不是使用非捕获组(?:使用积极向前看。

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

live demo

+0

谢谢!我错过了简单的东西 –

3

有一个很多方法可以做到这一点,但要纠正你的正则表达式,只需添加一个捕获组目标数字

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

Live DEMO

而另一一个(可以简化更多):

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

Live DEMO

+0

谢谢!我错过了一些简单的东西。 –

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); 
+0

谢谢!我错过了一些简单的东西。 –

相关问题