获取特定字符串之后的所有内容

时间:2016-02-24 00:39:14

标签: java regex split

我的字符串为"process_client_123_Tree""process_abc_pqr_client_123_Tree"。我想在"process_client_""process_abc_pqr_client_"之后提取所有内容并将其存储在String变量中。

此处currentKey变量可以包含以上两个字符串中的任何一个。

String clientId = // how to use currentKey here so that I can get remaining portion in this variable

这样做的正确方法是什么?我应该在这里使用split还是使用一些正则表达式?

3 个答案:

答案 0 :(得分:1)

import java.util.regex.*;

class test
{
    public static void main(String args[])
    {
        Pattern pattern=Pattern.compile("^process_(client_|abc_pqr_client_)(.*)$");
        Matcher matcher = pattern.matcher("process_client_123_Tree");
        while(matcher.find())
            System.out.println("String 1 Group 2: "+matcher.group(2));
        matcher = pattern.matcher("process_abc_pqr_client_123_Tree");
        while(matcher.find())
            System.out.println("String 2 Group 2: "+matcher.group(2));

        System.out.println("Another way..");

        System.out.println("String 1 Group 2: "+"process_client_123_Tree".replace("process_client_", ""));
        System.out.println("String 2 Group 2: "+"process_abc_pqr_client_123_Tree".replace("process_abc_pqr_client_", ""));
    }
}

输出:

$ java test
String 1 Group 2: 123_Tree
String 2 Group 2: 123_Tree
Another way..
String 1 Group 2: 123_Tree
String 2 Group 2: 123_Tree

正则表达式分手:

^匹配行的开头
process_(client_ | abc_pqr_client_)匹配“process_”后跟“client_”或abc_pqr_client_“(作为组1捕获)
(。*)$。表示任何char和*表示0次或更多次,因此它匹配字符串中的其余字符直到结束($)并将其捕获为组2

答案 1 :(得分:1)

123_Tree

获取你:

     mov ebx,first       ;move first into ebx
     mov second,ebx      ;copy ebx to second [NOW second=first]

正则表达式中的括号定义匹配组。管道是合乎逻辑的或。点表示任何字符和星号表示任何数字。因此,我使用该正则表达式创建一个模式对象,然后使用匹配器对象来获取已匹配的字符串部分。

答案 2 :(得分:1)

正则表达式可以是:"process_(?:abc_pqr_)?client_(\\w+)"  regex101 demo

Demo at RegexPlanet。匹配将在group(1) / first capturing group

要将其限制为右侧,请将lazily与正确的令牌匹配

"process_(?:abc_pqr_)?client_(\\w+?)_trace_count"

其中\w+?匹配尽可能少的单词字符以满足条件。