Regex: как совместить последнюю точку в строке
У меня есть две строки имени файла:
jquery.ui.min.js
jquery.ui.min.css
Какое регулярное выражение можно использовать для соответствия только LAST? Мне больше ничего не нужно, только конечная точка.
Немного больше о том, что я делаю. Я использую функцию PHP preg_split() для разделения имени файла на массив. Функция удаляет любые совпадения и дает массив с элементами между расколами. Я пытаюсь заставить его разбить jquery.ui.min.js на массив, который выглядит так:
array[0] = jquery.ui.min
array[1] = js
Ответы
Ответ 1
Я думаю, вам будет трудно использовать preg_split
, preg_match
должен быть лучшим выбором.
preg_match('/(.*)\.([^.]*)$/', $filename, $matches);
Кроме того, посмотрите pathinfo
.
Или, сделайте это очень просто в двух строках:
$filename = substr($file, 0, strrpos($file, '.'));
$extension = substr($file, strrpos($file, '.') + 1);
Ответ 2
Если вы хотите извлечь последнюю часть строки, вам понадобится:
\.([^.]*)$
если вы не хотите .
или
(\.[^.]*)$
если вы это сделаете.
Ответ 3
По номиналу нет причин использовать для этого регулярное выражение. Вот два разных метода, которые используют функции, оптимизированные для статического синтаксического анализа строк:
Вариант 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'];
Ответ 4
\.[^.]*$
Ответ 5
Я использовал это - попробуйте:
m/\.([^.\\]+)$/
Ответ 6
Здесь мне нужно исключить последнюю точку при сопоставлении только для последней "части":
[^\.]([^.]*)$