gpt4 book ai didi

java - java中模式的字符串比较

转载 作者:行者123 更新时间:2023-11-30 11:21:35 24 4
gpt4 key购买 nike

假设我有一个字符串模式为

/users/{id}

我得到的网址可能是

/users/1  
/users/abc123
/users/etc

我的意思是动态的,所以我有 2 个变量。

String dynamicPathPattern = "/users/{id}";
String dynamicPath = "/users/1";

/*
Something that will convert string pattern to regular expression. And compare it.
*/

现在我的问题是如何比较这个?
我认为正则表达式是可能的。谁能指导我应该如何开始?
是否有任何现成的东西可供我使用,例如 String.equals()

最佳答案

您正在寻找的模式是 \{[^\{]+\}。它搜索大括号中的任何内容。

一个想法是将您的源模式转换为包装器对象,该对象存储编译后的模式(转义除变量之外的所有内容)以及每个变量的名称。


编辑:对于您的情况,示例如下所示:

首先,创建一个 Range 类,其中包含两个 int 用于 startend。然后从 yourPatternString 中确定所有变量范围:

Pattern variablePattern = Pattern.compile("\\{[^\\{]+\\}");
Matcher variableMatcher = variablePattern.matcher(yourPatternString);
List<Range> variableRanges = new ArrayList<>();

while(variableMatcher.find()) {
variableRanges.add(new Range(variableMatcher.start(), variableMatcher.end()));
}

现在,使用这些范围,您可以通过用例如 [a-zA-Z]+ 替换每个范围来从您的模式创建一个新的正则表达式。然后,您可以简单地编译一个模式,并如上所述在您的输入字符串上创建一个匹配器。

关于java - java中模式的字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22172108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com