Java中的字符串模式匹配

时间:2011-10-29 09:27:34

标签: java string matching

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

对于例如。

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}"

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

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

4 个答案:

答案 0 :(得分:35)

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

答案 1 :(得分:14)

这只是String.contains

的问题
if (input.contains("{item}"))

如果您需要知道发生 的地方,可以使用indexOf

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

匹配完全字符串很好 - 如果你需要真正的模式(例如“三位数后跟最多2个字母AC”)那么你应该研究{{ 3}}

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

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

...

if (URL_PATTERN.matches(input).find())

答案 2 :(得分:3)

如果要检查另一个字符串中是否存在某个字符串,请使用String.contains

之类的字符串

如果要检查字符串中是否存在某些 pattern ,请附加并添加“。*”前缀。结果将接受包含模式的字符串。

示例:假设您有一些正则表达式 a(b | c),用于检查字符串是否与abac匹配
.*(a(b|c)).*会检查字符串是否包含abac

这种方法的一个缺点是它不会给你匹配的位置。

答案 3 :(得分:2)

您可以使用string.indexOf("{item}")执行此操作。如果结果大于-1 {item}在字符串