2013-03-29 2 views
3

У меня трудное время с регулярным выражением, я получаю отдельный «доход» без какого-либо предыдущего сопоставления.Regex делит одно заявление?

$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

@JohnSmith достаточно честно * \ * smug mode \ ** :) – 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

Смежные вопросы