регулярное выражение для имени файла с нумерацией в скобках?

#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 )).(.*)$
 
  1. Первая группа — это имя файла
  2. Вторая группа — номер файла
  3. Последняя группа — расширение без точки

Ответ №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: после литерала «.» до конца вашей строки (расширение файла)