正则表达式 - 以字符串开头和结尾

时间:2017-12-27 16:21:51

标签: java regex string

我想写一个正则表达式来匹配以" AMDF"开头的文件。或" SB700"并且不以" .tmp"结尾。这将在Java中使用。

3 个答案:

答案 0 :(得分:0)

一种方法可能是尝试使用否定先行的正则表达式断言文件名不以.tmp结束并使用锚^来确保文件名以{{开头1}}或AMDF喜欢:

^(?!.*\.tmp$)(?:AMDF|SB700)\w*\.\w+$

<强>解释

  • 字符串SB700
  • 的开头
  • 否定前瞻^
  • 断言字符串以.tmp (?!
  • 结尾
  • 与AMDF或SB700匹配的非捕获组.*\.tmp$
  • 匹配单词字符零次或多次(?:AMDF|SB700)
  • 匹配点\w*
  • 匹配单词字符一次或多次\.
  • 字符串\w+
  • 的结尾

在Java中它看起来像:

$

Demo

答案 1 :(得分:0)

代码

See regex in use here

-

用法

See code in use here

^(?: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} $