Java中的字符串模式匹配

新手上路,请多包涵

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

对于例如。

 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}/”的字符串

原文由 skmaran.nr.iras 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 579
2 个回答

您可以为此使用 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");
}

原文由 Narendra Yadala 发布,翻译遵循 CC BY-SA 3.0 许可协议

这只是 String.contains 的问题:

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

如果你需要知道它发生 _在哪里_,你可以使用 indexOf

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

这对于匹配 精确的 字符串很好——如果你需要真正的 _模式_(例如“三个数字后跟最多 2 个字母 AC”)那么你应该研究 正则表达式

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

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

...

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

原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏