簡體   English   中英

Java-如何使用RegEx解析此字符串

[英]Java - How to parse this String using RegEx

所以我有這個字符串,我想解析它。 通常我會使用string.split(),但是它有點復雜,所以我認為在這種情況下使用regex會更好。 但是我對regex不太熟悉。 也許你們的女孩/家伙可以幫助我。

我的字符串如下所示:

PING :sendak.freenode.net

或者像這樣

:username!~user@hostname.tld PRIVMSG #channelname :test

並且應解析為其組件的前綴,用戶名,命令,通道,文本。

例:

PING :sendak.freenode.net 

應該:

prefix=[] username=[] command=[PING] channel=[] text=[sendak.freenode.net]

和字符串:

:username!~user@hostname.tld PRIVMSG #channelname :test

應該解析為:

prefix=[username!~user@hostname.tld] username=[username] command=[PRIVMSG] channel=[#channelname] text=[test]

最后,我必須填寫以下變量:

message.prefix = "";
message.username = "";
message.command = "";
message.channel = "";
message.text = "";

我一次要分線!

很明顯,這將是一個小型IRC聊天。

我遇到的問題是,它可以以“:”開頭,而不必一定是這樣。因此,使用多個splits()使其變得相當復雜。

謝謝你的幫助!

我認為此正則表達式可以為您提供幫助: “((??((。 )![^] ))??([^] )(#([^] ))?(:(。*))?”

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Message{
    public String prefix = "";
    public String userName = "";
    public String command = "";
    public String channel = "";
    public String text = "";

    public Message(String line){
        Matcher matcher = Pattern.compile("(:?((.*)![^ ]*))? ?([^ ]*) (#([^ ]*) )?(:(.*))?").matcher(line);
        if (matcher.matches()){
            prefix = matcher.group(2) != null? matcher.group(2): "";
            userName = matcher.group(3) != null? matcher.group(3): "";
            command = matcher.group(4) != null? matcher.group(4): "";
            channel = matcher.group(6) != null? matcher.group(6): "";
            text = matcher.group(8) != null? matcher.group(8): "";
        }
    }

    @Override
    public String toString() {
        return String.format("prefix=[%s] username=[%s] command=[%s] channel=[%s] text=[%s]", prefix, userName, command, channel, text);
    }
}


public class TestRegex {

    public static void main(String[] args) {
        System.out.println(new Message("PING :sendak.freenode.net"));
        System.out.println(new Message(":username!~user@hostname.tld PRIVMSG #channelname :test"));
        System.out.println(new Message("username!~user@hostname.tld PRIVMSG #channelname :test"));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM