2013-03-29 100 views
3

我與正則表達式有困難,我得到一個單獨的「收入」沒有任何以前的匹配。正則表達式正在劃分一個單獨的聲明?

$string = "FY2013 EPS, FQ 2012 revenue"; 
preg_match_all("/F[Y|Q]\s?\d{4}\sEPS|revenue/", $string, $matches); 
print_r($matches); 

結果:

Array ([0] => Array ([0] => FY2013 EPS [1] => revenue)) 

我所期待的:

Array ([0] => Array ([0] => FY2013 EPS [1] => FQ 2012 revenue)) 

回答

4

它的內容或收入 - 要使用:

"/F[Y|Q]\s?\d{4}\s(?:EPS|revenue)/" 

地方?:表示非捕獲組

+0

我給了接受對你來說,既然你是第一個答案,給我6分鐘讓它。我爲所有其他答案+1了,謝謝你們! –

+1

@JohnSmith足夠公平的* \ *自由模式\ ** :) – Emissary

+0

嘿,我看到我們的兩個答案都是「剛纔」。你怎麼知道我的不是第一? :) –

2

您需要更改EPS|revenue而不是revenue以及其他所有內容。總之:

/F[Y|Q]\s?\d{4}\s(?:EPS|revenue)/ 
1

試試這個

preg_match_all("/(F[Y|Q]\s?\d{4}\s(EPS|revenue))/", $string, $matches); 

產生

Array 
(
    [0] => Array 
     (
      [0] => FY2013 EPS 
      [1] => FQ 2012 revenue 
     ) 

    [1] => Array 
     (
      [0] => FY2013 EPS 
      [1] => FQ 2012 revenue 
     ) 

    [2] => Array 
     (
      [0] => EPS 
      [1] => revenue 
     ) 
) 

5

試試這個

$string = "FY2013 EPS, FQ 2012 revenue"; 
preg_match_all("/F[Y|Q]\s?\d{4}\s(?:EPS|revenue)/", $string, $matches); 
print_r($matches); 
+2

+1 - 是的,得到組'''。 – 2013-03-29 11:54:28