[英]How to match a pattern but a pattern on regex
If I have a list of filename eg: 如果我有一个文件名列表,例如:
member_1235435.dat
member_1243533.txt
member_1_1_2015.txt
member_1_3_2015_rejected.dat
How can I match all within a pattern of member_{number}.extension except those with _rejected
? 我如何匹配member_ {number} .extension模式中的所有内容(具有
_rejected
除外)?
So far I have like this: 到目前为止,我是这样的:
^Member_.*.*
I thought it will look like this, but it does not work. 我以为它将看起来像这样,但是它不起作用。
^Member_.*(?!_rejected).*
I tried the first answer in comment 我在评论中尝试了第一个答案
24646-MBPRS-Username:myapp Username$ ./src/myapp launcher:local ~/Desktop/myfilesdirectory /^member_(?:.(?!_rejected))*$/
-bash: !_rejected: event not found
I tried to escape ! 我试图逃脱! sign, this is what I got
标志,这就是我得到的
24646-MBPRS-Username:myapp Username$ ./src/myapp launcher:local ~/Desktop/myfilesdirectory /^member_(?:.(?\!_rejected))*$/
-bash: syntax error near unexpected token `('
FYI, the pattern will go through command line argument 仅供参考,该模式将通过命令行参数
如果可接受的名称在member_
之后member_
数字和_
组合,则只需使用以下正则表达式即可:
^member_[\d_]+\.\w+$
The first answer works. 第一个答案有效。 I've used this code to test:
我已使用此代码进行测试:
<?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';
In case you want to use a extension with 3 letters, use '/^member_[\\d_]+\\.\\w{3}$/'
. 如果要使用3个字母的扩展名,请使用
'/^member_[\\d_]+\\.\\w{3}$/'
。
You can use the discard technique by using a regex like this: 您可以通过以下正则表达式使用丢弃技术:
.*rejected(*SKIP)(*FAIL)|^.*
using the ".ext" as the terminator after the numerical term. 在数字项之后使用“ .ext”作为终止符。
$ grep -Eo 'member_[0-9_]+\.(.*)$' file
member_1235435.dat
member_1243533.txt
member_1_1_2015.txt
In bash, filename patterns are not regexes. 在bash中,文件名模式不是正则表达式。 They are "globs" .
它们是“团” 。
Even where regexes are possible, such as inside [[...]], lookahead assertions are not implemented. 即使在可能出现正则表达式的地方,例如[[...]内部,也不会实现超前断言。
However, you can use extended globs, as described in the bash guide linked above: 但是,您可以使用扩展的glob,如上面链接的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.