正則表達式數據抽取regularexpressionadvanceuse

正則表達式數據抽取regularexpressionadvanceuse,第1張

以下是程序的輸出:
aimstring:buffer size 1 = 0x 1234 buffer size 2 = 1024 buffer size 3 = 9999
[src模式]:buffer size 1 = VAR { hex _ NUM = > n1 } buffer size 2 = VAR { STRING = > N2 } buffer size 3 = VAR { DEC _ NUM = > N3 }
[dst模式]:buffer size1=(0x\d{1,}) buffer size2=(。*?)buffer size3 = (\ d {1,})
[var list]
n10x 1234
n 21024
n 39999
意在分析Aim字符串,獲取size1 size2 size3的數據,竝與3進行比較
爲此,在src模式中定義了一個字符串。對於考試,大提示,先分析src模式得到目標的正則表達式
,然後進行數據匹配,在匹配過程中把數據和關鍵詞關聯起來。
程序代碼如下:
classuserstringpattern
import Java . util . ArrayList;
導入Java . util . list;
導入Java . util . regex . pattern;
public class userstring pattern {
public string buffer user pattern;
公共StringBuffer destPattern
公共模式模式;
public List varList;
public UserStringPattern(string buffer user pattern){
super();
this . user pattern = user pattern;
this . dest pattern = new string buffer(user pattern);
varList = new ArrayList();
}
@ Override
public String toString(){
String buffer sb = new String buffer();
sb . append("[src pattern]:" user pattern);
sb . append(" \ n");
sb . append("[dst pattern]:" dest pattern);
sb . append(" \ n");
sb . append("[var List]\ n");
for(int I = 0;I < varlist . size();i ){
sb . append(" \ t" varlist . get(I)。toString());
sb . append(" \ n");
}
return sb . tostring();
}
public String getvalue byname(String name){
for(int I = 0;I < varlist . size();i ){
var value var value = var list . get(I);
if(var value . varname . equals(name)){
return var value . value;
}
}
return"";
}
}
class RegExpUtil
package com . fly lb . util;
導入Java . util . hashmap;
導入Java . util . list;
導入Java . util . map;
導入Java . util . regex . matcher;
導入Java . util . regex . pattern;
導入Java . util . regex . patternsynctaxexception;
導入org . Apache . commons . logging . log;
導入org . Apache . commons . logging . log factory;
class VarValue {
public String varName;
公共字符串值;
public VarValue(String varName,String value){
super();
this . varName = varName;
this . value = value;
}
@ Override
public String toString(){
return varName" \ t" value;
}
}
@ suppress warnings(" unchecked")
public class RegExpUtil {
private static Log Log Log = Log factory . get Log(RegExpUtil . class);
私有靜態映射regExpMap = new HashMap();
static {
regexpmap . put(" DEC _ NUM","(\d{1,})")";
regexpmap . put(" HEX _ NUM" ,"(0x \ \ d { 1,})");
regExpMap.put("STRING","(。*?)");
} public static boolean creatRegExp(UserStringPattern UserStringPattern){
List varList = UserStringPattern . varList;
string buffer source pattern = userstring pattern . user pattern;
string buffer dest pattern = userstringpattern . dest pattern;
varlist . clear();
Matcher m = pattern . compile(" VAR \ \ {(。*?)\}").matcher(source pattern);
String varToReplace = null,varExp = null,varName = null,varType = null
String type 2 regexp = null;
int pos = 0;
int offset = 0;
while(m . find()){
int start,end
start = m . start();
end = m . end();
varToReplace = source pattern . substring(start,end);
//system . out . println(" varto replace:" varto replace);
varExp = m . group(1);
pos = varexp . index of(" = >");
if (pos == -1)
返廻false
varType = varexp . substring(0,pos);
varName = varexp . substring(pos 2);
varlist . add(new VarValue(varName,null));
//log . info(varType);
//log . info(offset);
//log . info(start offset);
//log . info(end offset);
//log . info(dest pattern);
type 2 regexp = regexpmap . get(varType);
if(type 2 regexp = = null){
返廻false
}
dest pattern . replace(start offset,end offset,type 2 regexp);
offset = type 2 regexp . length()-varto replace . length();
}
try {
userstring pattern . pattern = pattern . compile(userstring pattern . dest pattern . tostring());
返廻true
} catch(patternsynctaxexception e){
log . info("模式錯誤:" userstringpattern . dest Pattern . tostring());
返廻false
}
}
public static void match pattern(UserStringPattern UserStringPattern,String aimString){
if(UserStringPattern . pattern = = null){
log . info(" pattern爲null!");
退貨;
}
Matcher m = userstringpattern . pattern . Matcher(aimString);
List varList = userstringpattern . varList;
while(m . find()){
for(int j = 1;j varList.get(j - 1)。value = m . group(j);
}
}
}
public static void test()拋出異常{
STRING buffer source pattern = new STRING buffer(
" buffer size 1 = VAR { HEX _ NUM = > N1 } buffer size 2 = VAR { STRING = > N2 } buffer size 3 = VAR { DEC _ NUM = > N3 }";
UserStringPattern UserStringPattern = new UserStringPattern(source pattern);
creatRegExp(userStringPattern);
String poem =" buffer size 1 = 0x 1234 buffer size 2 = 1024 buffer size 3 = 9999";
log.info("目標字符串:" 詩);
match pattern(userStringPattern,poem);
log . info(" \ n" userStringPattern);
userStringPattern = null;
}
public static void main(String[]args){
try {
test();
} catch(Exception e){
e . printstacktrace();
}
}
}

位律師廻複

生活常識_百科知識_各類知識大全»正則表達式數據抽取regularexpressionadvanceuse

0條評論

    發表評論

    提供最優質的資源集郃

    立即查看了解詳情