我正在尝试将启用通配符的url转换为正则表达式(Pattern
),以便稍后可以将其与通配符的url匹配。
然后我发现,尽管具有相同的字符串值,但使用变量输入(String regex = 'str'
)会产生与直接字符串输入"regex str"
不同的结果。
我在官方文档中找不到这种行为。
String destination = "*.example.com";
String regex = destination.replaceAll("\\.", "\\\\\\\\.");
regex = regex.replaceAll("\\*", "\\.\\*");
System.out.println(regex); //this gives ".*\\.example\\.com"
System.out.println(Pattern.matches(regex, "office.example.com")); //false
System.out.println(Pattern.matches(".*\\.example\\.com", "office.example.com")); //true
答案 0 :(得分:1)
我们需要两个'\',因为它在字符串变量定义中。语句regex =“。* \\。example \\。com”,执行该语句后,regex的实际值为“。* \。example \ .com”。因此,您可以更改为destination.replaceAll(“ \\。”,“ \\\\。”)以使其正常工作。
答案 1 :(得分:1)
这里有两种转义:字符串和正则表达式。很容易忘记什么是什么。 replaceAll
的使用使事情变得更加困难。
我想你想要
String destination = "*.example.com";
String regex = destination.replace(".", "\\.").replace("*", ".*");
System.out.println(Pattern.matches(regex, "office.example.com"));
System.out.println(Pattern.matches(".*\\.example\\.com", "office.example.com"));