#regex
#регулярное выражение
Вопрос:
Я просто новичок в reg exp и пытаюсь их изучить. Если у меня есть такое имя файла:
myfile(1).jpg or myfile(21).jpg
Как я могу извлечь с помощью reg exp (php или javascript) file name [myfile]
, bracket numbering [1]
и extension [jpg]
?
Комментарии:
1. Я могу расширить нумерацию с помощью этого /((.*?))/, но все равно не имя файла
Ответ №1:
Попробуйте это регулярное выражение:
/^(.*?)(?:((d )))?.(. )$/
$1
переменная будет содержать имя файла.
$2
переменная будет содержать нумерацию (если она доступна, иначе она будет неопределенной или нулевой).
$3
переменная будет содержать расширение.
Комментарии:
1. на самом деле это работает лучше. Спасибо. это происходит даже тогда, когда имя файла — sadasd(asdasd(23).jpg. вы, кажется, гуру регулярных выражений
2. Я не понимаю, в чем смысл /^(.*?), в частности, первого «?». Просто я пытаюсь декодировать этот reg exp.
3.
^
и$
являются начальными и конечными якорями, что означает совпадение с началом и концом строки.?
для(.*?)
ungreedy
сопоставления используется in .?:
указать регулярному выражению не создавать никаких обратных ссылок / групп. Здесь сложно все объяснить. Хорошим ресурсом является Regular-Expressions.info .4. Большое вам спасибо, Азиз, вы очень вежливы.
Ответ №2:
Вы можете попробовать с:
^(.*?)((d )).(.*)$
- Первая группа — это имя файла
- Вторая группа — номер файла
- Последняя группа — расширение без точки
Ответ №3:
На каком языке вы используете регулярные выражения? Какой вариант синтаксиса регулярного выражения?
Вот ваш пример использования perl:
my $s = 'myfile(21).jpg';
$s =~ m/^(.*?)((d )).(.*)$/;
print "found 1=$1, 2=$2, 3=$3n";
Он возвращает:
found 1=myfile, 2=21, 3=jpg
^(.*?)(
: хранит группу с кратчайшей строкой вплоть до литерала «(«, начиная с начала вашей строки
(d )
: хранит группу: последовательность чисел
.(.*)$
сохраняет строку group: после литерала «.» до конца вашей строки (расширение файла)