2016-09-29 5 views
0

У меня есть строковая переменная и вы хотите извлечь год и номер в одиночку.Извлечь шаблон с использованием preg_match

$val = '2015(15)'; 
preg_match ('/(.*?)\((.*?)\)/',$val,$match); 
print_r($match); 

Выход: Array ([0] => 2015(15) [1] => 2015 [2] => 15)

Ожидаемое: выше порядке. или Array ([0] => 2015 [1] => 15)

$val = '2015'; 
preg_match ('/(.*?)\((.*?)\)/',$val,$match); 
print_r($match); 

Выход: Array ()

Ожидаемое: Array ([0] => 2015 [1] => )

$val = '(15)'; 
preg_match ('/(.*?)\((.*?)\)/',$val,$match); 
print_r($match); 

Выход: Array ([0] => (15) [1] => [2] => 15)

Ожидаемое: Array ([0] => [1] => 15)

+1

Ты не можешь просто взорваться ')' и удалить окончательный ')' из второго пункта? Существуют и другие способы, не связанные с регулярными выражениями. –

+0

Да. Я могу использовать split или explode и обрезать последний массив массива результатов с помощью ')'. Спасибо за решение. – Naga

ответ

3

Решение

Может быть, вы можете попробовать что-то вроде,

/([0-9]{4})?(?:\(([0-9]*)\))?/ 
+1

, если говорить о номере года, тогда '([12] [0-9] {3})' немного более реалистично, даже рассмотрим аббревиатуру, состоящую из двух цифр, как преобразовать обратно в 4, если только годы после 2000 считаются, (2 [0-9] {3}) ' – cske

+0

Спасибо. Таким образом, я могу достичь ожидаемого результата. – Naga

+0

@cske Это вполне приемлемо, но также делает код устаревшим после 2999. Реально, нет причин не принимать годы от 0000 до 9999, и причина, по которой я ограничиваю годы до 4 чисел, объясняется тем, что предоставил ОП. –

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

  • Нет связанных вопросов^_^