Регулярное выражение: как сопоставить последнюю точку в строке
У меня есть две строки имени файла в качестве примера:
jquery.ui.min.js
jquery.ui.min.css
Какое регулярное выражение я могу использовать, чтобы соответствовать только ПОСЛЕДНЕЙ точке? Мне больше ничего не нужно, только последняя точка.
Немного подробнее о том, что я делаю. Я использую функцию PHP preg_split(), чтобы разделить имя файла на массив. Функция удаляет все совпадения и предоставляет вам массив с элементами между разделениями. Я пытаюсь заставить его расколоться jquery.ui.min.js в массив, который выглядит следующим образом:
array[0] = jquery.ui.min
array[1] = js
6 answers
Я думаю, вам будет трудно использовать preg_split
, preg_match
должно быть, это лучший выбор.
preg_match('/(.*)\.([^.]*)$/', $filename, $matches);
В качестве альтернативы, взгляните на pathinfo
.
Или сделайте это очень просто в двух строках:
$filename = substr($file, 0, strrpos($file, '.'));
$extension = substr($file, strrpos($file, '.') + 1);
Если вы хотите извлечь последнюю часть строки, вам понадобится:
\.([^.]*)$
Если вы не хотите .
или
(\.[^.]*)$
Если вы это сделаете.
По номинальной стоимости нет причин использовать для этого регулярное выражение. Вот 2 различных метода, которые используют функции, оптимизированные для статического анализа строк:
Вариант 1:
$ext = "jquery.ui.min.css";
$ext = array_pop(explode('.',$ext));
echo $ext;
Вариант 2:
$ext = "jquery.ui.min.css";
$ext = pathinfo($ext);
echo $ext['extension'];
\.[^.]*$
Я использовал это - попробуйте:
m/\.([^.\\]+)$/
Вот что мне нужно было исключить последнюю точку при сопоставлении только для последней "части":
[^\.]([^.]*)$