2013-10-26 145 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

謝謝!我錯過了一些簡單的東西。 –

相關問題