#php #preg-match
#php #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. Разве вы не можете просто взорвать
)
и удалить final)
из второго элемента? Существуют и другие способы, отличные от регулярных выражений.2. ДА. Я могу использовать split или explode и обрезать последний индекс результирующего массива с помощью ‘)’. Спасибо за решение.
Ответ №1:
Решение
Возможно, вы можете попробовать что-то вроде,
/([0-9]{4})?(?:(([0-9]*)))?/
Комментарии:
1. если говорить о номере года, то
([12][0-9]{3})
это немного более реалистично, даже рассмотрите аббревиатуру two number form как преобразовать обратно в 4, если только годы после 2000 считаются тогда(2[0-9]{3})
2. Спасибо. Таким образом, я могу достичь ожидаемого результата.
3. @cske Это вполне приемлемо, но также делает код устаревшим после 2999. На самом деле, нет причин не принимать годы от 0000 до 9999, и причина, по которой я жестко ограничиваю годы 4 числами, заключается в том, что предоставил OP.
4. я имею в виду реальную жизнь, а не какую-то академическую прописку, я не думаю, что это счастливый путь для OP, чтобы соответствовать эквалайзеру.
0001
5. @cske Это прискорбно.