格式为XYZ%20DEF.emx#ZMP_00234C3B7的字符串的正则表达式是什么?



我要查找pattern

的字符串
XYZ%20DEF.emx#ZMP_00234C3B7?XYZ%20DEF/ABC_AL12345?

在另一个字符串中。

以下是正则表达式 的规则
  1. "。emx'固定在相同的相对位置。
  2. '#'固定在相同的相对位置。
  3. '/'固定在相同的相对位置。
  4. "?’固定在相同的相对位置。
  5. 前面的部分。emx'是url编码的,所以里面会有%20。
  6. 前面的部分。emx'在第一个'?'之后重复自己。
下面的

是我根据上面的规则构造的字符串。

SOMENAME_WITH_%20.emx#SOMETHING_WITH_NUMBERS_AND_ALPHABETS?SOMENAME_WITH_%20/SOME_OTHER_NAME_WITH_%20AL12345?

我已经尝试得到我需要的正则表达式,下面是我得到的距离。

(w+).emx#w+?1/w+ALd{5}?

如果字符串中没有'%20',这个正则表达式会找到它。我不知道如何修改上面的正则表达式来查找字符串中的%20。

查找%20的正则表达式是

 %[A-Fa-f0-9]{2}

但是我不知道如何结合这两个正则表达式来得到我想要的。

查找具有上述模式的字符串的正确正则表达式是什么?

根据我在下面选择的答案,我最终使用以下regex

([\w%\)\(]+)\.emx#\w+\?\1\/([\w%\)\(?-]+)AL\d{5}\?")

你可以试试:

(\w+%\w+)\.emx#[\w%]+\?\1\/[\w%]+AL\d{5}\?

演示

下面是Java中的示例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest{
    public static void main(String[] args){
        String string = "fregtreDFGDFG5464SOMENAME_WITH_%20.emx#SOMETHING_WITH_NUMBERS_" +
                "AND_ALPHABETS?SOMENAME_WITH_%20/SOME_OTHER_NAME_WITH_%20AL12345?" +
                "SDFSFDSFSDfdste5464565yGFDGdfgdfgdfgdfgTRy45y/retertre?retertreterERter" +
                "45345435XYZ%20DEF.emx#ZMP_00234C3B7?XYZ%20DEF/ABC_AL12345?%?54654DFGDfg?5656//56456";
        Pattern pattern = Pattern.compile("(\w+%\w+)\.emx#[\w%]+\?\1\/[\w%]+AL\d{5}\?");
        Matcher matcher = pattern.matcher(string);
        while(matcher.find()) {
            System.out.println(string.substring(matcher.start(), matcher.end()));
            System.out.println();
        }
    }
}
与结果:

20. emx SOMENAME_WITH_ % # SOMETHING_WITH_NUMBERS_AND_ALPHABETS ? SOMENAME_WITH_ % 20/SOME_OTHER_NAME_WITH_ % 20 al12345吗?

XYZ % 20 def.emx # ZMP_00234C3B7 ? XYZ % 20 def/ABC_AL12345吗?

最新更新