如果我有一个文件名列表,例如:
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 `('
仅供参考,该模式将通过命令行参数
答案 0 :(得分:1)
如果可接受的名称在_
之后具有数字和member_
的组合,则只需使用以下正则表达式:
^member_[\d_]+\.\w+$
答案 1 :(得分:0)
第一个答案有效。我用这段代码来测试:
<?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';
如果您想使用包含3个字母的扩展程序,请使用'/^member_[\d_]+\.\w{3}$/'
。
答案 2 :(得分:0)
答案 3 :(得分:0)
使用“.ext”作为数字术语后的终止符。
$ grep -Eo 'member_[0-9_]+\.(.*)$' file
member_1235435.dat
member_1243533.txt
member_1_1_2015.txt
答案 4 :(得分:0)
在bash中,文件名模式不是正则表达式。它们是"globs"。
即使可以使用正则表达式,例如[[...]]内部,也不会实现前瞻断言。
但是,您可以使用扩展的globs,如上面链接的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