2012-06-27 46 views
-2

date = 2011-07-08 time = 10:55:06 timezone =「IST」device_name =「CR1000i」device_id = C010600504-TYGJD3 deployment_mode =「Route」log_id = 031006209001 log_type =「反病毒」 log_component = 「FTP」 log_subtype = 「乾淨」 狀態= 「被拒絕」 的優先級=嚴重fw_rule_id = 「」 USER_NAME = 「與Hemant」 病毒= 「codevirus」 FTP_URL = 「ftp.myftp.com」 FTP_direction = 「下載」 文件名= 「hemantresume.doc」 FILE_SIZE = 「550K」 FILE_PATH = 「deepti /快捷方式virus.lnk」 ftpcommand = 「RETR」 src_ip = 10.103.6.100 dst_ip = 10.103.6.66協議= 「TCP」 src_port = 2458 dst_port = 21 dstdomain = 「myftp.cpm」sent_bytes = 162 recv_bytes = 45 message =「由於文件被病毒代碼病毒感染,FTP服務器ftp.myftp.com中文件大小爲550k的文件resume.doc的FTP下載無法完成」對於在java中使用正則表達式的split字符串

現在我希望上面的字符串被分割d給我基於下面的鍵值對輸出:

array[0]=date=2011-07-08 

array[1]=time=10:55:06 

array[2]=timezone="IST" 

array[3]=device_name='CR1000i" 

....... 

....... 

,請幫助me..thanks

+1

你嘗試過什麼?你有沒有讀過String類的javadoc? –

+1

@asha - 兩個標記中是否有空格?即btn date = 2011-07-08和time = 10:55:06? – Saurabh

+0

引號內可以有空格。這是主要困難。例如,看到關鍵的「消息」。然後甚至可能會在引號內引用引號,同樣的舊故事開始。 –

回答

2

可以使用過於簡單正則表達式(幾乎)像@Hlopik建議的,然後循環查找所有匹配項:

String text = "dstdomain=\"myftp.cpm\" sent_bytes=162 recv_bytes=45 message=\"An FTP download of File resume.doc of size 550k from server ftp.myftp.com could not be completed as file was infected with virus codevirus\""; 
String patternText = "\\w+=([^ \"]+|\"[^\"]*\")"; 
Matcher matcher = Pattern.compile(patternText).matcher(text); 
List<String> matches = new ArrayList<String>(); 
while (matcher.find()) { 
    matches.add(matcher.group()); 
} 

如果您確實需要結果作爲Array出於某種原因,您可以使用matches.toArray()

+0

thanks..Keppil..it工程.. –

1

只是一個靈感考慮這個表達式:\w*=(["][^"]*["]|[^ ]*) 任何數量的單詞(匹配\ w)的字符,等號,以及任何在報價或什麼第一空間。它你的榜樣一致,但肯定會有一些,這正則表達式將是:)

+0

@Hlopik ...因爲我正在分裂與上面的正則表達式它沒有給我任何..所有作爲空白 –

+0

它不適用於拆分方法,但對於匹配,如圖美麗@ Keppil的答案:) – mhlopko

1

請找到下面的代碼。請注意,代碼是用JAVA語言編寫的。

StringBuilder testt = new StringBuilder("date=2011-07-08 time=10:55:06 timezone=\"IST\" device_name=\"CR1000i\" device_id=C010600504-TYGJD3 deployment_mode=\"Route\" log_id=031006209001 log_type=\"Anti Virus\" log_component=\"FTP\" log_subtype=\"Clean\" status=\"Denied\" priority=Critical fw_rule_id=\"\" user_name=\"hemant\" virus=\"codevirus\" FTP_URL=\"ftp.myftp.com\" FTP_direction=\"download\" filename=\"hemantresume.doc\" file_size=\"550k\" file_path=\"deepti/Shortcut to virus.lnk\" ftpcommand=\"RETR\" src_ip=10.103.6.100 dst_ip=10.103.6.66 protocol=\"TCP\" src_port=2458 dst_port=21 dstdomain=\"myftp.cpm\" sent_bytes=162 recv_bytes=45 message=\"An FTP download of File resume.doc of size 550k from server ftp.myftp.com could not be completed as file was infected with virus codevirus\""); 

Pattern varPattern = Pattern.compile("[A-Z_]+=", Pattern.CASE_INSENSITIVE); 

Matcher varMatcher = varPattern.matcher(testt); 

List<String> list = new ArrayList<String>(); 

int startIndex = 0, endIndex=0; 

boolean found=false; 

while (varMatcher.find()) { 

endIndex = varMatcher.start(); 

list.add(testt.substring(startIndex, endIndex)); 

startIndex= varMatcher.start(); 

found=true; 

} 

if(found){ 
list.add(testt.substring(startIndex)); 
} 

for(String s:list){ 
System.out.println(s); 
} 
+0

@ Saurabh..thanks..it就像一個魅力... –

相關問題