我要查找pattern
的字符串XYZ%20DEF.emx#ZMP_00234C3B7?XYZ%20DEF/ABC_AL12345?
在另一个字符串中。
以下是正则表达式 的规则- "。emx'固定在相同的相对位置。
- '#'固定在相同的相对位置。
- '/'固定在相同的相对位置。
- "?’固定在相同的相对位置。
- 前面的部分。emx'是url编码的,所以里面会有%20。
- 前面的部分。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吗?