Java 中的字符串模式匹配

2022-09-02 02:29:34

我想在输入刺痛中搜索给定的字符串模式。

例如。

String URL = "https://localhost:8080/sbs/01.00/sip/dreamworks/v/01.00/cui/print/$fwVer/{$fwVer}/$lang/en/$model/{$model}/$region/us/$imageBg/{$imageBg}/$imageH/{$imageH}/$imageSz/{$imageSz}/$imageW/{$imageW}/movie/Kung_Fu_Panda_two/categories/3D_Pix/item/{item}/_back/2?$uniqueID={$uniqueID}"

现在我需要搜索字符串URL是否包含“”。请帮帮我。/{item}/

这是一个示例。实际上我需要检查URL是否包含匹配的字符串“/{a-zA-Z0-9}/”


答案 1

您可以使用该类来实现此目的。如果您只想匹配单词字符,则可以使用以下正则表达式。 是 的简写。如果你同意,那么使用,否则使用。Pattern{}\w[a-zA-Z0-9_]_\w[a-zA-Z0-9]

String URL = "https://localhost:8080/sbs/01.00/sip/dreamworks/v/01.00/cui/print/$fwVer/{$fwVer}/$lang/en/$model/{$model}/$region/us/$imageBg/{$imageBg}/$imageH/{$imageH}/$imageSz/{$imageSz}/$imageW/{$imageW}/movie/Kung_Fu_Panda_two/categories/3D_Pix/item/{item}/_back/2?$uniqueID={$uniqueID}";
Pattern pattern = Pattern.compile("/\\{\\w+\\}/");
Matcher matcher = pattern.matcher(URL);
if (matcher.find()) {
    System.out.println(matcher.group(0)); //prints /{item}/
} else {
    System.out.println("Match not found");
}

答案 2

这只是 String.contains 的问题

if (input.contains("{item}"))

如果您需要知道它发生的位置,可以使用:indexOf

int index = input.indexOf("{item}");
if (index != -1) // -1 means "not found"
{
    ...
}

这对于匹配精确字符串来说很好 - 如果您需要真实模式(例如,“三位数字后跟最多2个字母A-C”),那么您应该研究正则表达式

编辑:好吧,听起来你确实想要正则表达式。你可能想要这样的东西:

private static final Pattern URL_PATTERN =
    Pattern.compile("/\\{[a-zA-Z0-9]+\\}/");

...

if (URL_PATTERN.matcher(input).find())