2013-02-25 14 views
0

我有這個字符串,它有一年的中間。 我想提取一年之前和之後的所有內容。php正則表達式所有前後年份

我用下面的正則表達式個人:

  1. 提取物日期:'/\d{4}\b/'
  2. 日之前提取的一切:'/(.*?)\d{4}\b/';(我不知道如何從結果中不包括日期,但是這不是一個問題...)
  3. 日之後提取的一切:'/d{4}\/(.*?)\b/'(這個人是不工作)
+2

你應該提供一些例子,你有什麼作爲輸入,結果應該是什麼樣的等等。 – 2013-02-25 11:51:50

+1

試試這個/\d{4}(.*)\b/你在「d」之前離開「\」 – sanj 2013-02-25 11:55:04

回答

5
$str = 'The year is 2048, and there are flying forks.'; 
$regex = '/(.*)\b\d{4}\b(.*)/'; 
preg_match($regex,$str,$matches); 

$before = isset($matches[1])?$matches[1]:''; 
$after = isset($matches[2])?$matches[2]:''; 

echo $before.$after; 

編輯:要回答在具有多年OP的(Luis的)評論:

$str = 'The year is 2048 and there are 4096 flying forks from 1999.'; 
$regex = '/(\b\d{4}\b)/'; 
$split = preg_split($regex,$str,-1,PREG_SPLIT_DELIM_CAPTURE); 
print_r($split); 

$split提供了一個陣列,如:

Array 
(
    [0] => The year is 
    [1] => 2048 
    [2] => and there are 
    [3] => 4096 
    [4] => flying forks from 
    [5] => 1999 
    [6] => . 
) 

這二次例子也說明涉及假設風險在可分析數據上(注意在4096處的分支數量與4位數年份中的數量匹配)。

+0

謝謝!這適合我。 如果我在同一個字符串中有兩年,我需要在正則表達式中更新以匹配第一年的發生情況?謝謝。 – Luis 2013-02-25 12:30:17

+0

路易斯,我已經更新了我的答案。 – zamnuts 2013-02-27 09:06:15

+0

謝謝你的幫助。 我正在尋找匹配第一年的事件,所以我更新了你的正則表達式這樣的建議,它的工作原理: $ regex ='/(.*?)\b\d{4}\b(.*)/'; – Luis 2013-02-28 10:56:03