我想写一个正则表达式来匹配以" AMDF"开头的文件。或" SB700"并且不以" .tmp"结尾。这将在Java中使用。
答案 0 :(得分:0)
一种方法可能是尝试使用否定先行的正则表达式断言文件名不以.tmp
结束并使用锚^
来确保文件名以{{开头1}}或AMDF
喜欢:
^(?!.*\.tmp$)(?:AMDF|SB700)\w*\.\w+$
<强>解释强>
SB700
^
(?!
.*\.tmp$
(?:AMDF|SB700)
\w*
\.
\w+
在Java中它看起来像:
$
答案 1 :(得分:0)
-
^(?:AMDF|SB700).*\.(?!tmp$)[^.]+$
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
final String regex = "^(?:AMDF|SB700).*\\.(?!tmp$)[^.]+$";
final String[] files = {
"AMDF123978sudjfadfs.ext",
"SB700afddasjfkadsfs.ext",
"AMDE41312312089fsas.ext",
"SB701fs98dfjasdjfsd.ext",
"AMDF123120381203113.tmp"
};
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
for (String file:files) {
final Matcher matcher = pattern.matcher(file);
if(matcher.matches()) {
System.out.println(matcher.group(0));
}
}
}
}
以下仅显示匹配。
AMDF123978sudjfadfs.ext
SB700afddasjfkadsfs.ext
AMDE41312312089fsas.ext
SB701fs98dfjasdjfsd.ext
AMDF123120381203113.tmp
AMDF123978sudjfadfs.ext
SB700afddasjfkadsfs.ext
在行首处断言位置^
按字面匹配(?:AMDF|SB700)
或AMDF
SB700
多次匹配任何字符.*
匹配文字点\.
字符.
否定前瞻确保后面的内容与字面上的(?!tmp$)
不匹配(之后断言该行的结尾以便不匹配tmp
其中.tmpx
可以是任何内容)x
匹配[^.]+
除{/ 1}}之外的任何字符.
断言行尾的位置答案 2 :(得分:0)
这是另一个有效的例子:
^(SB700 | AMDF)*(\ tmp目录?!){4} $
。