Если у меня есть список имен файлов, например:
member_1235435.dat
member_1243533.txt
member_1_1_2015.txt
member_1_3_2015_rejected.dat
Как я могу сопоставить все внутри шаблона member_ {number}.extension, кроме тех, у которых есть _rejected
?
Пока мне это нравится:
^Member_.*.*
Я думал, это будет выглядеть так, но это не сработает.
^Member_.*(?!_rejected).*
Я пробовал первый ответ в комментарии
24646-MBPRS-Username:myapp Username$ ./src/myapp launcher:local ~/Desktop/myfilesdirectory /^member_(?:.(?!_rejected))*$/
-bash: !_rejected: event not found
Я пытался убежать! знак, вот что я получил
24646-MBPRS-Username:myapp Username$ ./src/myapp launcher:local ~/Desktop/myfilesdirectory /^member_(?:.(?\!_rejected))*$/
-bash: syntax error near unexpected token '('
FYI, шаблон будет проходить через аргумент командной строки
Если допустимые имена имеют комбинации чисел и _
после member_
вы можете просто использовать следующее регулярное выражение:
^member_[\d_]+\.\w+$
В bash шаблоны имен файлов не являются регулярными выражениями. Это "глобусы".
Даже там, где возможны регулярные выражения, такие как внутри [[...]], утверждения в отношении взглядов не выполняются.
Однако вы можете использовать расширенные глобусы, как описано в приведенном выше руководстве bash:
$ shopt -s extglob
$ echo member_!(*_rejected*).dat
member_1235435.dat
$ echo member_!(*_rejected*).*
member_1235435.dat
member_1243533.txt
member_1_1_2015.txt
используя ".ext" в качестве терминатора после численного термина.
$ grep -Eo 'member_[0-9_]+\.(.*)$' file
member_1235435.dat
member_1243533.txt
member_1_1_2015.txt
Вы можете использовать технику discard, используя регулярное выражение:
.*rejected(*SKIP)(*FAIL)|^.*
Первый ответ работает. Я использовал этот код для тестирования:
<?php
$s = [
'member_1235435.dat',
'member_1243533.txt',
'member_1_1_2015.txts',
'mber_1_1_2015.txt',
'member_1_3_2015_rejected.dat'
];
echo preg_match('/^member_[\d_]+\.\w+$/', $s[1]) ? 'yes' : 'no';
Если вы хотите использовать расширение с тремя буквами, используйте '/^member_[\d_]+\.\w{3}$/'
.