如何将字符串与我的正则表达式匹配?

时间:2014-12-22 02:14:10

标签: java regex string

我有一个将以这种格式出现的字符串 -

/pep/v1/clients/clientId/tester

我需要使用上述格式验证我的字符串并从中提取clientId

示例可以是 -

/pep/v1/clients/ST-980/tester
/pep/v1/clients/123/tester
/pep/v1/clients/Hello%20World/tester

所以clientId通常可以是任何东西,所以我需要匹配clientId中的任何内容。它可以是数字,字符串或数字和字符串混合或字母数字字符串。

所以我提出了以下正则表达式,但它并没有适用于上述所有示例。

^/pep/v1/clients/[0-9A-Za-z]+/tester$

我正在使用Java,在将我的字符串与上面的正则表达式匹配后,我需要从中提取clientId。

4 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

^\/pep\/v1\/clients\/([^\/]+)\/tester$

Java正则表达式,

^/pep/v1/clients/([^/]+)/tester$

然后打印组索引1以获得所需的输出。 它使用了/字符被否定的char类,因此匹配组中不会接受foo/bar之类的内容。

String[] arr =  {"/pep/v1/clients/ST-980/tester",
        "/pep/v1/clients/123/tester",
        "/pep/v1/clients/Hello%20World/tester" };
for (String s: arr)
{
    Matcher m = Pattern.compile("^/pep/v1/clients/([^/]+)/tester$").matcher(s);
    while(m.find())
    {
        System.out.println(m.group(1));
    }
}

输出:

ST-980
123
Hello%20World

答案 1 :(得分:0)

试试这个:

^\\/pep\\/v1\\/clients\\/(.+)\\/tester$

.将匹配任何字符。

答案 2 :(得分:0)

"^\\/pep\\/v1\\/clients\\/(.+)\\/tester$"会做你需要的。

请注意,您必须使用/转义\,因为\是Java中的转义字符,您也必须将其转义,因此\\/匹配/字面意思。

Here is a link to how you can experiment with it.

^断言行开头的位置
\/字面匹配字符/ pep字面匹配字符pep(区分大小写)
\/字面匹配字符/ v1字面匹配字符v1(区分大小写)
\/字面匹配字符/ clients字面匹配字符clients(区分大小写)
\/字面匹配字符/ 第一个捕获组(.+)
    .+匹配任何字符(换行符除外)
    量词:+在一次和无限次之间,尽可能多次,根据需要回馈[贪心]
\/字面匹配字符/ tester字面匹配字符测试器(区分大小写)

如果您要拒绝其中包含(.+)字面值的ID,请将([^\\/]+)替换为/

答案 3 :(得分:-1)

以下代码可以解决问题。这假设后缀和前缀的其余部分是常量。

   Pattern pattern = Pattern.compile("^/pep/v1/clients/(.+)/tester$");
    Matcher m = pattern.matcher("/pep/v1/clients/ST-980/tester");
    if (m.find()) {
        System.out.println("clientId = " + m.group(1));
    }