锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
闂:灝嗗乏杈圭殑SQL璇彞瑙f瀽鎴愬彸杈圭殑褰㈠紡
Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2,g3 order by g2,g3
select
c1,
c2,
c3
from
t1,
t2,
t3
where
condi1=5 and
condi6=6 or
condi7=7
group by
g1,
g2,
g3
order by
g2,
g3
鎸夊叧閿瓧鎵懼嚭SQL璇彞涓悇閮ㄥ垎
鎴戜滑闃呰SQL璇彞浼氭妸鏁村彞鍒嗘潵鎴愬垪,琛?鏉′歡,鍒嗙粍瀛楁,鎺掑簭瀛楁鏉ョ悊瑙?瑙f瀽SQL鐨勭洰鐨勪篃鏄繖鏍?
鍒嗚ВSQL璇彞鏈夎寰嬪彲寰?浠ュ垪涓轟緥,瀹冨繀瀹氬寘鍚湪select鍜宖rom涔嬮棿,鎴戜滑鍙鑳芥壘鍒癝QL璇彞涓殑鍏抽敭瀛梥elect鍜宖rom,灝辮兘鎵懼埌鏌ヨ鐨勫垪.
鎬庝箞鎵懼埌select鍜宖rom涔嬮棿鐨勬枃瀛楀憿?鍏跺疄涓涓鍒欒〃杈懼紡灝辮兘瑙e喅:(select)(.+)(from),鍏朵腑絎簩緇?.+)浠h〃鐨勬枃瀛楀氨鏄痵elect鍜宖rom涔嬮棿鐨勬枃瀛?
紼嬪簭瑙佸彸杈?
/**
* 浠庢枃鏈瑃ext涓壘鍒皉egex棣栨鍖歸厤鐨勫瓧絎︿覆錛屼笉鍖哄垎澶у皬鍐?br />
* @param regex錛?姝e垯琛ㄨ揪寮?br />
* @param text錛氭鏌ユ壘鐨勫瓧絎︿覆
* @return regex棣栨鍖歸厤鐨勫瓧絎︿覆錛屽鏈尮閰嶈繑鍥炵┖
*/
private static String getMatchedString(String regex,String text){
Pattern pattern=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(text);
while(matcher.find()){
return matcher.group(2);
}
return null;
}
瑙f瀽鍑芥暟鍒嗘瀽
private static String getMatchedString(String regex,String text){
Pattern pattern=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(text);
while(matcher.find()){
return matcher.group(2);
}
return null;
}
宸﹁竟鐨勮繖涓嚱鏁?絎竴涓弬鏁版槸鎷熷畾鐨勬鍒欒〃杈懼紡,絎簩涓槸鏁翠釜SQL璇彞.
褰撴鍒欒〃杈懼紡涓?select)(.+)(from)鏃?紼嬪簭灝嗗湪SQL涓煡鎵劇涓嬈″尮閰嶇殑鍦版柟(鏈塒attern.CASE_INSENSITIVE鐨勮緗?鏌ユ壘涓嶅尯鍒嗗ぇ灝忓啓),濡傛灉鎵懼埌浜嗗垯榪斿洖妯″紡涓殑絎簩緇勪唬琛ㄧ殑鏂囧瓧.
濡傛灉sql鏄痵elect a,b from tc,鍒欒繑鍥炵殑鏂囧瓧鏄痑,b.
閫夋嫨鐨勮〃瀵瑰簲鐨勬煡鎵炬鍒欒〃杈懼紡
閫夋嫨鐨勮〃姣旇緝鐗規畩,瀹冧笉鎯抽夋嫨鐨勫垪涓鏍峰浐瀹氬浜巗elect鍜宖rom涔嬮棿,褰撴病鏈夋煡鎵炬潯浠跺瓨鍦ㄦ椂,瀹冨浜巉rom鍜岀粨鏉熶箣闂?褰撴湁鏌ユ壘鏉′歡瀛樺湪鏃?瀹冨浜巉rom鍜寃here涔嬮棿.
鍥犳鏌ヨ鍑芥暟鍐欎負鍙寵竟鐨勫艦寮?
/**
* 瑙f瀽閫夋嫨鐨勮〃
*
*/
private void parseTables(){
String regex="";
if(isContains(sql,"\\s+where\\s+")){
regex="(from)(.+)(where)";
}
else{
regex="(from)(.+)($)";
}
tables=getMatchedString(regex,sql);
}
isContains鍑芥暟
isContains鍑芥暟鐢ㄤ簬鍦╨ineText涓煡鎵緒ord,鍏朵腑涓嶅尯鍒嗗ぇ灝忎簺,鍙鎵懼埌浜嗗嵆榪斿洖鐪?
/**
* 鐪媤ord鏄惁鍦╨ineText涓瓨鍦紝鏀寔姝e垯琛ㄨ揪寮?br />
* @param lineText
* @param word
* @return
*/
private static boolean isContains(String lineText,String word){
Pattern pattern=Pattern.compile(word,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(lineText);
return matcher.find();
}
瑙f瀽鏌ユ壘鏉′歡鐨勫嚱鏁?/strong>
private void parseConditions(){
String regex="";
if(isContains(sql,"\\s+where\\s+")){
// 鍖呮嫭Where錛屾湁鏉′歡
if(isContains(sql,"group\\s+by")){
// 鏉′歡鍦╳here鍜実roup by涔嬮棿
regex="(where)(.+)(group\\s+by)";
}
else if(isContains(sql,"order\\s+by")){
// 鏉′歡鍦╳here鍜宱rder by涔嬮棿
regex="(where)(.+)(order\\s+by)";
}
else{
// 鏉′歡鍦╳here鍒板瓧絎︿覆鏈熬
regex="(where)(.+)($)";
}
}
else{
// 涓嶅寘鎷瑆here鍒欐潯浠舵棤浠庤皥璧鳳紝榪斿洖鍗沖彲
return;
}
conditions=getMatchedString(regex,sql);
}
瑙f瀽GroupBy鐨勫瓧孌?/strong>
private void parseGroupCols(){
String regex="";
if(isContains(sql,"group\\s+by")){
// 鍖呮嫭GroupBy錛屾湁鍒嗙粍瀛楁
if(isContains(sql,"order\\s+by")){
// group by 鍚庢湁order by
regex="(group\\s+by)(.+)(order\\s+by)";
}
else{
// group by 鍚庢棤order by
regex="(group\\s+by)(.+)($)";
}
}
else{
// 涓嶅寘鎷珿roupBy鍒欏垎緇勫瓧孌墊棤浠庤皥璧鳳紝榪斿洖鍗沖彲
return;
}
groupCols=getMatchedString(regex,sql);
}
瑙f瀽OrderBy鐨勫瓧孌?/strong>
private void parseOrderCols(){
String regex="";
if(isContains(sql,"order\\s+by")){
// 鍖呮嫭order by錛屾湁鍒嗙粍瀛楁
regex="(order\\s+by)(.+)($)";
}
else{
// 涓嶅寘鎷珿roupBy鍒欏垎緇勫瓧孌墊棤浠庤皥璧鳳紝榪斿洖鍗沖彲
return;
}
orderCols=getMatchedString(regex,sql);
}
寰楀埌瑙f瀽鍚庣殑鍚勯儴鍒?/strong>
鎸変互涓婅В鏋愭柟娉曡幏寰椾簡鍒?琛?鏉′歡,鍒嗙粍鏉′歡,鎺掑簭鏉′歡鍚勯儴鍒嗕箣鍚?瀹冧滑浼氬瓨鍌ㄥ埌鍚勪釜鎴愬憳鍙橀噺涓?
娉ㄦ剰榪欎簺鎴愬憳鍙橀噺鐨勫師鍊奸兘鏄痭ull,濡傛灉鍦⊿QL璇彞涓兘澶熸壘鍒板搴旂殑閮ㄥ垎鐨勮瘽瀹冧滑灝嗗熷姪getMatchedString鑾峰緱鍊?鍚﹀垯榪樻槸null.鎴戜滑閫氳繃鍒ゆ柇榪欎簺鎴愬憳鍙橀噺鏄惁涓虹┖灝辮兘鐭ラ亾瀹冨搴旂殑閮ㄥ垎鏄惁琚В鏋愬嚭鏉?
/**
* 寰呰В鏋愮殑SQL璇彞
*/
private String sql;
/**
* SQL涓夋嫨鐨勫垪
*/
private String cols;
/**
* SQL涓煡鎵劇殑琛?br />
*/
private String tables;
/**
* 鏌ユ壘鏉′歡
*/
private String conditions;
/**
* Group By鐨勫瓧孌?br />
*/
private String groupCols;
/**
* Order by鐨勫瓧孌?br />
*/
private String orderCols;
鍙栧緱涓嶉渶瑕佸崟琛屾樉紺烘椂鐨凷QL璇彞
榪涘睍鍒拌繖涓姝?SQL璇彞涓垪,琛?鏉′歡,鍒嗙粍鏉′歡,鎺掑簭鏉′歡鍚勯儴鍒嗛兘琚幏鍙栦簡鍑烘潵,榪欐椂鎶婂畠浠噸鏂扮粍鍚堜竴涓嬪氨鑳藉緱鍒版暣鐞嗗悗鐨凷QL璇彞.
濡備笅闈㈢殑SQL璇彞灝嗗彉鎴愬彸杈圭殑閮ㄥ垎(鍏堜嬌闈欐佹垚鍛榠sSingleLine=false):
Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2,g3 order by g2,g3
select
c1,c2,c3
from
t1,t2,t3
where
condi1=5 and condi6=6 or condi7=7
group by
g1,g2,g3
order by
g2,g3
榪涗竴姝ヨВ鏋?/strong>
鏈夋椂鎴戜滑闇瑕佹妸鍒?琛?鏉′歡,鍒嗙粍鏉′歡,鎺掑簭鏉′歡鍗曡鏄劇ず浠ユ柟渚挎煡鐪嬫垨鍔犱笂娉ㄩ噴,榪欏氨瑕佹眰鎴戜滑瀵瑰垪,琛?鏉′歡,鍒嗙粍鏉′歡,鎺掑簭鏉′歡絳夎繘琛岃繘涓姝ヨВ鏋?
鍒濈湅瑙f瀽寰堟柟渚?浠ュ浐瀹氱殑鍒嗛殧絎﹀妶鍒嗗嵆鍙?浣嗛渶瑕佹敞鎰忕殑鏄煡璇㈡潯浠朵腑鍒嗛殧絎︽湁and鍜宱r涓ょ,濡傛灉璐哥劧鍒嗛殧浼氫嬌閲嶆柊緇勫悎鏃朵嬌SQL澶辯湡.
鎺ㄨ崘涓縐嶅仛娉?鎴戜滑鍙互鍦ㄥ垎闅旂鍚庡姞涓婁竴涓爣蹇楀絀鴻,鐒跺悗鍐嶄互榪欎釜鏍囧織鏉ュ妶鍒?榪欐牱灝變笉浼氫嬌SQL澶辯湡浜?
璇瘋涓嬮〉鐨刧etSplitedParagraph鍑芥暟.
getSplitedParagraph鍑芥暟
private static List<String> getSplitedParagraph(String paragraph,String splitStr){
List<String> ls=new ArrayList<String>();
// 鍏堝湪鍒嗛殧絎﹀悗鍔犵┖鏍?br />
Pattern p = Pattern.compile(splitStr,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(paragraph);
StringBuffer sb = new StringBuffer();
boolean result = m.find();
while (result) {
m.appendReplacement(sb, m.group(0) + Crlf);
result = m.find();
}
m.appendTail(sb);
// 鍐嶆寜絀烘牸鏂
String[] arr=sb.toString().split("[\n]+");
for(String temp:arr){
ls.add(FourSpace+temp+Crlf);
}
return ls;
}
澶勭悊緇撴灉
鎶婇潤鎬佹垚鍛樺彉閲廼sSingleLine=true鍚庢垜浠潵鐪嬬湅鎵ц緇撴灉:
select
c1,
c2,
c3
from
t1,
t2,
t3
where
condi1=5 and
condi6=6 or
condi7=7
group by
g1,
g2,
g3
order by
g2,
g3
灝忕粨
浠庤繖涓緥瀛愪腑鎴戜滑浣撲細浜嗗垎娌葷殑鎬濇兂:鍒嗘不鏄妸涓涓ぇ闂鍒嗚В鎴愬皬闂,鐒跺悗鍒嗗埆瑙e喅灝忛棶棰?鍐嶇粍鍚堣搗鏉ュぇ闂鐨勮В鍐蟲柟娉曞氨宸笉澶氫簡.榪欑鎬濇兂鍦ㄥ伐紼嬮鍩熻В鍐抽棶棰樻椂寰堟櫘閬?鎴戜滑瑕佸浼氫嬌鐢ㄨ繖縐嶆濇兂鏉ョ湅寰?鍒嗘瀽鍜岃В鍐抽棶棰?涓嶈璐姹傚ぇ,緇撴灉瀵艱嚧鍦ㄥぇ闂闈㈠墠涓絳硅帿灞?
鍏舵鎴戜滑鍙互浠庤繖涓緥瀛愪腑瀛︿範鎵捐寰?鐒跺悗鍊熷姪瑙勫緥鐨勮繃紼?鐜板疄涓栫晫鍗冨彉涓囧寲,浣嗛兘鏈夎寰嬪彲寰?鍙鎴戜滑鎵懼埌浜嗚寰?灝辯瓑浜庢壘鍒頒簡浜嬬墿涔嬮棬鐨勯挜鍖?
鎺ヤ笅浜嗘垜浠涔犱簡姝e垯琛ㄨ揪寮忕敤浜庢煡鎵劇殑鏂規硶,浠ュ墠鐨勬鍒欒〃杈懼紡瀛︿範澶氱敤浜庨獙璇佸尮閰?鍏跺疄榪欏彧鏄鍒欒〃杈懼紡鐨勪竴閮ㄥ垎鍔熻兘.
鏈鍚庝粠瑙f瀽鏉′歡鎴愬崟琛岀殑榪囩▼涓?鎴戜滑鍙互瀛︿範鍒頒竴縐嶈В鍐抽棶棰樼殑鎶宸?鍗沖綋鐜板疄涓殑瑙勫緥瀛樺湪鍙樻暟鏃跺姞鍏ヤ漢涓鴻緗殑瑙勫緥,榪欐湁鏃惰兘浣挎垜浠洿濂芥洿蹇殑瑙e喅闂.
^琛ㄧず妯″紡鐨勫紑濮?濡俕he鍖歸厤鎵鏈変互he寮澶寸殑瀛楃涓?
渚嬬▼:
String[] dataArr = { "he", "hero", "here", "hitler"};
for (String str : dataArr) {
String patternStr = "(^he)(\\w*)";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("瀛楃涓? + str + "鍖歸厤妯″紡" + patternStr + "鎴愬姛");
} else {
System.out.println("瀛楃涓? + str + "鍖歸厤妯″紡" + patternStr + "澶辮觸");
}
}
閫氶厤絎?
$琛ㄧず妯″紡鐨勭粨鏉?濡俰a$鍖歸厤鎵鏈変互ia緇撳熬鐨勫崟璇?
String[] dataArr = { "ia", "Asia", "China", "Colonbia","America"};
for (String str : dataArr) {
String patternStr = "(\\w*)(ia$)";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("瀛楃涓? + str + "鍖歸厤妯″紡" + patternStr + "鎴愬姛");
} else {
System.out.println("瀛楃涓? + str + "鍖歸厤妯″紡" + patternStr + "澶辮觸");
}
}
閫氶厤絎}
闄や簡鐢?琛ㄧず涓嬈℃垨澶氭,*琛ㄧず0嬈℃垨澶氭,?琛ㄧず0嬈℃垨涓嬈″,榪樺彲浠ョ敤{}鏉ユ寚瀹氱簿紜寚瀹氬嚭鐜扮殑嬈℃暟,X{2,5}琛ㄧずX鏈灝戝嚭鐜?嬈?鏈澶氬嚭鐜?嬈?X{2,}琛ㄧずX鏈灝戝嚭鐜?嬈?澶氬垯涓嶉檺;X{5}琛ㄧずX鍙簿紜殑鍑虹幇5嬈?
渚嬬▼:
String[] dataArr = { "google", "gooogle", "gooooogle", "goooooogle","ggle"};
for (String str : dataArr) {
String patternStr = "g(o{2,5})gle";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("瀛楃涓? + str + "鍖歸厤妯″紡" + patternStr + "鎴愬姛");
} else {
System.out.println("瀛楃涓? + str + "鍖歸厤妯″紡" + patternStr + "澶辮觸");
}
}
閫氶厤絎]涓殑-
-琛ㄧず浠?.鍒?#8230;,濡俒a-e]絳夊悓浜嶽abcde]
String[] dataArr = { "Tan", "Tbn", "Tcn", "Ton","Twn"};
for (String str : dataArr) {
String regex = "T[a-c]n";
boolean result = Pattern.matches(regex, str);
if (result) {
System.out.println("瀛楃涓? + str + "鍖歸厤妯″紡" + regex + "鎴愬姛");
} else {
System.out.println("瀛楃涓? + str + "鍖歸厤妯″紡" + regex + "澶辮觸");
}
}
Pattern綾葷殑鏂規硶綆榪?br />
鏂規硶
璇存槑
static Pettern compile(String regex,int flag)
緙栬瘧妯″紡,鍙傛暟regex琛ㄧず杈撳叆鐨勬鍒欒〃杈懼紡,flag琛ㄧず妯″紡綾誨瀷(Pattern.CASE_INSENSITIVE 琛ㄧず涓嶅尯鍒嗗ぇ灝忓啓)
Matcher match(CharSequence input)
鑾峰彇鍖歸厤鍣?input鏃惰緭鍏ョ殑寰呭鐞嗙殑瀛楃涓?/td>
static boolean matches(String regex, CharSequence input)
蹇熺殑鍖歸厤璋冪敤,鐩存帴鏍規嵁杈撳叆鐨勬ā寮弐egex鍖歸厤input
String[] split(CharSequence input,int limit)
鍒嗛殧瀛楃涓瞚nput,limit鍙傛暟鍙互闄愬埗鍒嗛殧鐨勬鏁?/td>
妯″紡綾誨瀷Pattern.CASE_INSENSITIVE
姝e垯琛ㄨ揪寮忛粯璁ら兘鏄尯鍒嗗ぇ灝忓啓鐨?浣跨敤浜哖attern.CASE_INSENSITIVE鍒欎笉瀵瑰ぇ灝忓啓榪涜鍖哄垎.
String patternStr="ab";
Pattern pattern=Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
String[] dataArr = { "ab", "Ab", "AB"};
for (String str : dataArr) {
Matcher matcher=pattern.matcher(str);
if(matcher.find()){
System.out.println("瀛楃涓? + str + "鍖歸厤妯″紡" + patternStr + "鎴愬姛");
}
}
Pattern鐨剆plit鏂規硶紺轟緥
娉ㄦ剰榪欓噷瑕佹妸澶嶆潅鐨勬ā寮忓啓鍦ㄥ墠闈?鍚﹀垯綆鍗曟ā寮忎細鍏堝尮閰嶄笂.
String input="鑱屽姟=GM 钖按=50000 , 濮撳悕=鑱屼笟緇忕悊浜?; 鎬у埆=鐢?nbsp; 騫撮緞=45 ";
String patternStr="(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)";
Pattern pattern=Pattern.compile(patternStr);
String[] dataArr=pattern.split(input);
for (String str : dataArr) {
System.out.println(str);
}
Matcher綾葷殑鏂規硶綆榪?br />
鏂規硶
璇存槑
boolean matches()
瀵規暣涓緭鍏ュ瓧絎︿覆榪涜妯″紡鍖歸厤.
boolean lookingAt()
浠庤緭鍏ュ瓧絎︿覆鐨勫紑濮嬪榪涜妯″紡鍖歸厤
boolean find(int start)
浠巗tart澶勫紑濮嬪尮閰嶆ā寮?/td>
int groupCount()
榪斿洖鍖歸厤鍚庣殑鍒嗙粍鏁扮洰
String replaceAll(String replacement)
鐢ㄧ粰瀹氱殑replacement鍏ㄩ儴鏇夸唬鍖歸厤鐨勯儴鍒?/td>
String repalceFirst(String replacement)
鐢ㄧ粰瀹氱殑replacement鏇夸唬絎竴嬈″尮閰嶇殑閮ㄥ垎
Matcher appendReplacement(StringBuffer sb,String replacement)
鏍規嵁妯″紡鐢╮eplacement鏇挎崲鐩稿簲鍐呭,騫跺皢鍖歸厤鐨勭粨鏋滄坊鍔犲埌sb褰撳墠浣嶇疆涔嬪悗
StringBuffer appendTail(StringBuffer sb)
灝嗚緭鍏ュ簭鍒椾腑鍖歸厤涔嬪悗鐨勬湯灝懼瓧涓叉坊鍔犲埌sb褰撳墠浣嶇疆涔嬪悗.
鍖歸厤紺轟緥涓:XML鍏冪礌鏂囧瓧瑙f瀽
String regex="<(\\w+)>(\\w+)</\\1>";
Pattern pattern=Pattern.compile(regex);
String input="<name>Bill</name><salary>50000</salary><title>GM</title>";
Matcher matcher=pattern.matcher(input);
while(matcher.find()){
System.out.println(matcher.group(2));
}
鏇挎崲瀹炰緥涓:灝嗗崟璇嶅拰鏁板瓧閮ㄥ垎鐨勫崟璇嶆崲鎴愬ぇ鍐?/strong>
String regex="([a-zA-Z]+[0-9]+)";
Pattern pattern=Pattern.compile(regex);
String input="age45 salary500000 50000 title";
Matcher matcher=pattern.matcher(input);
StringBuffer sb=new StringBuffer();
while(matcher.find()){
String replacement=matcher.group(1).toUpperCase();
matcher.appendReplacement(sb, replacement);
}
matcher.appendTail(sb);
System.out.println("鏇挎崲瀹岀殑瀛椾覆涓?+sb.toString());
java.util.regex浠嬬粛
java.util.regex鏄竴涓敤姝e垯琛ㄨ揪寮忔墍璁㈠埗鐨勬ā寮忔潵瀵瑰瓧絎︿覆榪涜鍖歸厤宸ヤ綔鐨勭被搴撳寘銆傚畠鍖呮嫭涓や釜綾伙細Pattern鍜孧atcher Pattern .
Pattern鏄竴涓鍒欒〃杈懼紡緇忕紪璇戝悗鐨勮〃鐜版ā寮忋?nbsp;
Matcher 涓涓狹atcher瀵硅薄鏄竴涓姸鎬佹満鍣紝瀹冧緷鎹甈attern瀵硅薄鍋氫負鍖歸厤妯″紡瀵瑰瓧絎︿覆灞曞紑鍖歸厤媯鏌ャ傞鍏堜竴涓狿attern瀹炰緥璁㈠埗浜嗕竴涓墍鐢ㄨ娉曚笌PERL鐨勭被浼肩殑姝e垯琛ㄨ揪寮忕粡緙栬瘧鍚庣殑妯″紡錛岀劧鍚庝竴涓狹atcher瀹炰緥鍦ㄨ繖涓粰瀹氱殑Pattern瀹炰緥鐨勬ā寮忔帶鍒朵笅榪涜瀛楃涓茬殑鍖歸厤宸ヤ綔銆?/p>
Pattern綾?/strong>
鍦╦ava涓?閫氳繃閫傚綋鍛藉悕鐨凱attern綾誨彲浠ュ鏄撶‘瀹歋tring鏄惁鍖歸厤鏌愮妯″紡.妯″紡鍙互璞″尮閰嶆煇涓壒瀹氱殑String閭f牱綆鍗?涔熷彲浠ュ緢澶嶆潅,闇瑕侀噰鐢ㄥ垎緇勫拰瀛楃綾?濡傜┖鐧?鏁板瓧,瀛楁瘝鎴栨帶鍒剁.鍥犱負Java瀛楃涓插熀浜庣粺涓瀛楃緙栫爜(Unicode),姝e垯琛ㄨ揪寮忎篃閫傜敤浜庡浗闄呭寲鐨勫簲鐢ㄧ▼搴?
Pattern鐨勬柟娉?/strong>
Pattern鐨勬柟娉曞涓嬶細 static Pattern compile(String regex)
灝嗙粰瀹氱殑姝e垯琛ㄨ揪寮忕紪璇戝茍璧嬩簣緇橮attern綾?nbsp;
static Pattern compile(String regex, int flags)
鍚屼笂錛屼絾澧炲姞flag鍙傛暟鐨勬寚瀹氾紝鍙夌殑flag鍙傛暟鍖呮嫭錛欳ASE INSENSITIVE,MULTILINE,DOTALL,UNICODE CASE錛?CANON EQ
int flags()
榪斿洖褰撳墠Pattern鐨勫尮閰峟lag鍙傛暟.
Matcher matcher(CharSequence input)
鐢熸垚涓涓粰瀹氬懡鍚嶇殑Matcher瀵硅薄
static boolean matches(String regex, CharSequence input)
緙栬瘧緇欏畾鐨勬鍒欒〃杈懼紡騫朵笖瀵硅緭鍏ョ殑瀛椾覆浠ヨ姝e垯琛ㄨ揪寮忎負妯″紑灞曞尮閰?璇ユ柟娉曢傚悎浜庤姝e垯琛ㄨ揪寮忓彧浼氫嬌鐢ㄤ竴嬈$殑鎯呭喌錛屼篃灝辨槸鍙繘琛屼竴嬈″尮閰嶅伐浣滐紝鍥犱負榪欑鎯呭喌涓嬪茍涓嶉渶瑕佺敓鎴愪竴涓狹atcher瀹炰緥銆?nbsp;
String pattern()
榪斿洖璇atter瀵硅薄鎵緙栬瘧鐨勬鍒欒〃杈懼紡銆?nbsp;
String[] split(CharSequence input)
灝嗙洰鏍囧瓧絎︿覆鎸夌収Pattern閲屾墍鍖呭惈鐨勬鍒欒〃杈懼紡涓烘ā榪涜鍒嗗壊銆?nbsp;
String[] split(CharSequence input, int limit)
浣滅敤鍚屼笂錛屽鍔犲弬鏁發imit鐩殑鍦ㄤ簬瑕佹寚瀹氬垎鍓茬殑孌墊暟錛屽灝唋imi璁句負2錛岄偅涔堢洰鏍囧瓧絎︿覆灝嗘牴鎹鍒欒〃杈懼紡鍒嗕負鍓蹭負涓ゆ銆?nbsp;
涓涓鍒欒〃杈懼紡錛屼篃灝辨槸涓涓叉湁鐗瑰畾鎰忎箟鐨勫瓧絎︼紝蹇呴』棣栧厛瑕佺紪璇戞垚涓轟竴涓狿attern綾葷殑瀹炰緥錛岃繖涓狿attern瀵硅薄灝嗕細浣跨敤matcher()鏂規硶鏉ョ敓鎴愪竴涓狹atcher瀹炰緥錛屾帴鐫渚垮彲浠ヤ嬌鐢ㄨ Matcher瀹炰緥浠ョ紪璇戠殑姝e垯琛ㄨ揪寮忎負鍩虹瀵圭洰鏍囧瓧絎︿覆榪涜鍖歸厤宸ヤ綔錛屽涓狹atcher鏄彲浠ュ叡鐢ㄤ竴涓狿attern瀵硅薄鐨勩?
Matcher鐨勬柟娉?/strong>
Matcher appendReplacement(StringBuffer sb, String replacement)
灝嗗綋鍓嶅尮閰嶅瓙涓叉浛鎹負鎸囧畾瀛楃涓詫紝騫朵笖灝嗘浛鎹㈠悗鐨勫瓙涓蹭互鍙婂叾涔嬪墠鍒頒笂嬈″尮閰嶅瓙涓蹭箣鍚庣殑瀛楃涓叉娣誨姞鍒頒竴涓猄tringBuffer瀵硅薄閲屻?
StringBuffer appendTail(StringBuffer sb)
灝嗘渶鍚庝竴嬈″尮閰嶅伐浣滃悗鍓╀綑鐨勫瓧絎︿覆娣誨姞鍒頒竴涓猄tringBuffer瀵硅薄閲屻?
int end()
榪斿洖褰撳墠鍖歸厤鐨勫瓙涓茬殑鏈鍚庝竴涓瓧絎﹀湪鍘熺洰鏍囧瓧絎︿覆涓殑绱㈠紩浣嶇疆 銆?
int end(int group)
榪斿洖涓庡尮閰嶆ā寮忛噷鎸囧畾鐨勭粍鐩稿尮閰嶇殑瀛愪覆鏈鍚庝竴涓瓧絎︾殑浣嶇疆銆?
boolean find()
灝濊瘯鍦ㄧ洰鏍囧瓧絎︿覆閲屾煡鎵句笅涓涓尮閰嶅瓙涓層?
boolean find(int start)
閲嶈Matcher瀵硅薄錛屽茍涓斿皾璇曞湪鐩爣瀛楃涓查噷浠庢寚瀹氱殑浣嶇疆寮濮嬫煡鎵句笅涓涓尮閰嶇殑瀛愪覆銆?
String group()
榪斿洖褰撳墠鏌ユ壘鑰岃幏寰楃殑涓庣粍鍖歸厤鐨勬墍鏈夊瓙涓插唴瀹?
String group(int group)
榪斿洖褰撳墠鏌ユ壘鑰岃幏寰楃殑涓庢寚瀹氱殑緇勫尮閰嶇殑瀛愪覆鍐呭
int groupCount()
榪斿洖褰撳墠鏌ユ壘鎵鑾峰緱鐨勫尮閰嶇粍鐨勬暟閲忋?
boolean lookingAt()
媯嫻嬬洰鏍囧瓧絎︿覆鏄惁浠ュ尮閰嶇殑瀛愪覆璧峰銆?
boolean matches()
灝濊瘯瀵規暣涓洰鏍囧瓧絎﹀睍寮鍖歸厤媯嫻嬶紝涔熷氨鏄彧鏈夋暣涓洰鏍囧瓧絎︿覆瀹屽叏鍖歸厤鏃舵墠榪斿洖鐪熷箋?
Pattern pattern()
榪斿洖璇atcher瀵硅薄鐨勭幇鏈夊尮閰嶆ā寮忥紝涔熷氨鏄搴旂殑Pattern 瀵硅薄銆?
String replaceAll(String replacement)
灝嗙洰鏍囧瓧絎︿覆閲屼笌鏃㈡湁妯″紡鐩稿尮閰嶇殑瀛愪覆鍏ㄩ儴鏇挎崲涓烘寚瀹氱殑瀛楃涓層?
String replaceFirst(String replacement)
灝嗙洰鏍囧瓧絎︿覆閲岀涓涓笌鏃㈡湁妯″紡鐩稿尮閰嶇殑瀛愪覆鏇挎崲涓烘寚瀹氱殑瀛楃涓層?
Matcher reset()
閲嶈璇atcher瀵硅薄銆?
Matcher reset(CharSequence input)
閲嶈璇atcher瀵硅薄騫朵笖鎸囧畾涓涓柊鐨勭洰鏍囧瓧絎︿覆銆?
int start()
榪斿洖褰撳墠鏌ユ壘鎵鑾峰瓙涓茬殑寮濮嬪瓧絎﹀湪鍘熺洰鏍囧瓧絎︿覆涓殑浣嶇疆銆?
int start(int group)
榪斿洖褰撳墠鏌ユ壘鎵鑾峰緱鐨勫拰鎸囧畾緇勫尮閰嶇殑瀛愪覆鐨勭涓涓瓧絎﹀湪鍘熺洰鏍囧瓧絎︿覆涓殑浣嶇疆銆?
涓涓狹atcher瀹炰緥鏄鐢ㄦ潵瀵圭洰鏍囧瓧絎︿覆榪涜鍩轟簬鏃㈡湁妯″紡錛堜篃灝辨槸涓涓粰瀹氱殑Pattern鎵緙栬瘧鐨勬鍒欒〃杈懼紡錛夎繘琛屽尮閰嶆煡鎵劇殑錛屾墍鏈夊線 Matcher鐨勮緭鍏ラ兘鏄氳繃CharSequence鎺ュ彛鎻愪緵鐨勶紝榪欐牱鍋氱殑鐩殑鍦ㄤ簬鍙互鏀寔瀵逛粠澶氬厓鍖栫殑鏁版嵁婧愭墍鎻愪緵鐨勬暟鎹繘琛屽尮閰嶅伐浣溿?/p>
浣跨敤Pattern綾繪楠屽瓧絎﹀尮閰?/strong>
姝e垯寮忔槸鏈綆鍗曠殑鑳藉噯紜尮閰嶄竴涓粰瀹歋tring鐨勬ā寮?妯″紡涓庤鍖歸厤鐨勬枃鏈槸絳変環鐨?闈欐佺殑Pattern.matches鏂規硶鐢ㄤ簬姣旇緝涓涓猄tring鏄惁鍖歸厤涓涓粰瀹氭ā寮?渚嬬▼濡備笅:
String data="java";
boolean result=Pattern.matches("java",data);
瀛楃綾誨拰琛ㄧず嬈℃暟鐨勭壒孌婂瓧絎?/p>
瀵逛簬鍗曞瓧絎︿覆姣旇緝鑰岃█,浣跨敤姝e垯琛ㄨ揪寮忔病鏈変粈涔堜紭鍔?Regex鐨勭湡姝e己澶т箣澶勫湪浜庝綋鐜板湪鍖呮嫭瀛楃綾誨拰閲忚瘝(*,+,?)鐨勬洿澶嶆潅鐨勬ā寮忎笂.
瀛楃綾誨寘鎷?
\d 鏁板瓧
\D 闈炴暟瀛?br />
\w 鍗曞瓧瀛楃(0-9,A-Z,a-z)
\W 闈炲崟瀛楀瓧絎?br />
\s 絀虹櫧(絀烘牸絎?鎹㈣絎?鍥炶濺絎?鍒惰〃絎?
\S 闈炵┖鐧?br />
[] 鐢辨柟鎷彿鍐呯殑涓涓瓧絎﹀垪琛ㄥ垱寤虹殑鑷畾涔夊瓧絎︾被
. 鍖歸厤浠諱綍鍗曚釜瀛楃
涓嬮潰鐨勫瓧絎﹀皢鐢ㄤ簬鎺у埗灝嗕竴涓瓙妯″紡搴旂敤鍒板尮閰嶆鏁扮殑榪囩▼.
? 閲嶅鍓嶉潰鐨勫瓙妯″紡0嬈″埌涓嬈?br />
* 閲嶅鍓嶉潰鐨勫瓙妯″紡0嬈℃垨澶氭
+ 閲嶅鍓嶉潰鐨勫瓙妯″紡涓嬈″埌澶氭
澶嶆潅鍖歸厤渚嬩竴:閲嶅嬈℃暟鍖歸厤
String[] dataArr = { "moon", "mon", "moon", "mono" };
for (String str : dataArr) {
String patternStr="m(o+)n";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("瀛楃涓?+str+"鍖歸厤妯″紡"+patternStr+"鎴愬姛");
}
else{
System.out.println("瀛楃涓?+str+"鍖歸厤妯″紡"+patternStr+"澶辮觸");
}
}
妯″紡鏄?#8221;m(o+)n”,瀹冭〃紺簃n涓棿鐨刼鍙互閲嶅涓嬈℃垨澶氭,鍥犳moon,mon,mooon鑳藉尮閰嶆垚鍔?鑰宮ono鍦╪鍚庡浜嗕竴涓猳,鍜屾ā寮忓尮閰嶄笉涓?
娉?
+琛ㄧず涓嬈℃垨澶氭;?琛ㄧず0嬈℃垨涓嬈?*琛ㄧず0嬈℃垨澶氭.
澶嶆潅鍖歸厤浜?鍗曚釜瀛楃鍖歸厤
String[] dataArr = { "ban", "ben", "bin", "bon" ,"bun","byn","baen"};
for (String str : dataArr) {
String patternStr="b[aeiou]n";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("瀛楃涓?+str+"鍖歸厤妯″紡"+patternStr+"鎴愬姛");
}
else{
System.out.println("瀛楃涓?+str+"鍖歸厤妯″紡"+patternStr+"澶辮觸");
}
}
娉?鏂規嫭鍙蜂腑鍙厑璁哥殑鍗曚釜瀛楃,妯″紡“b[aeiou]n”鎸囧畾,鍙湁浠寮澶?n緇撳熬,涓棿鏄痑,e,i,o,u涓換鎰忎竴涓殑鎵嶈兘鍖歸厤涓?鎵浠ユ暟緇勭殑鍓嶄簲涓彲浠ュ尮閰?鍚庝袱涓厓绱犳棤娉曞尮閰?
鏂規嫭鍙穂]琛ㄧず鍙湁鍏朵腑鎸囧畾鐨勫瓧絎︽墠鑳藉尮閰?
澶嶆潅鍖歸厤涓?澶氫釜瀛楃鍖歸厤
String[] dataArr = { "been", "bean", "boon", "buin" ,"bynn"};
for (String str : dataArr) {
String patternStr="b(ee|ea|oo)n";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("瀛楃涓?+str+"鍖歸厤妯″紡"+patternStr+"鎴愬姛");
}
else{
System.out.println("瀛楃涓?+str+"鍖歸厤妯″紡"+patternStr+"澶辮觸");
}
}
濡傛灉闇瑕佸尮閰嶅涓瓧絎?閭d箞[]灝變笉鑳界敤涓婁簡,榪欓噷鎴戜滑鍙互鐢?)鍔犱笂|鏉ヤ唬鏇?()琛ㄧず涓緇?|琛ㄧず鎴栫殑鍏崇郴,妯″紡b(ee|ea|oo)n灝辮兘鍖歸厤been,bean,boon絳?
鍥犳鍓嶄笁涓兘鍖歸厤涓?鑰屽悗涓や釜涓嶈兘.
澶嶆潅鍖歸厤鍥?鏁板瓧鍖歸厤
String[] dataArr = { "1", "10", "101", "1010" ,"100+"};
for (String str : dataArr) {
String patternStr="\\d+";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("瀛楃涓?+str+"鍖歸厤妯″紡"+patternStr+"鎴愬姛");
}
else{
System.out.println("瀛楃涓?+str+"鍖歸厤妯″紡"+patternStr+"澶辮觸");
}
}
娉?浠庡墠闈㈠彲浠ョ煡閬?\\d琛ㄧず鐨勬槸鏁板瓧,鑰?琛ㄧず涓嬈℃垨澶氭,鎵浠ユā寮廫\d+灝辮〃紺轟竴浣嶆垨澶氫綅鏁板瓧.
鍥犳鍓嶅洓涓兘鍖歸厤涓?鏈鍚庝竴涓洜涓?鍙鋒槸闈炴暟瀛楀瓧絎﹁屽尮閰嶄笉涓?
澶嶆潅鍖歸厤浜?瀛楃鏁板瓧娣峰悎鍖歸厤
String[] dataArr = { "a100", "b20", "c30", "df10000" ,"gh0t"};
for (String str : dataArr) {
String patternStr="\\w+\\d+";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("瀛楃涓?+str+"鍖歸厤妯″紡"+patternStr+"鎴愬姛");
}
else{
System.out.println("瀛楃涓?+str+"鍖歸厤妯″紡"+patternStr+"澶辮觸");
}
}
妯″紡\\w+\\d+琛ㄧず鐨勬槸浠ュ涓崟瀛楀瓧絎﹀紑澶?澶氫釜鏁板瓧緇撳熬鐨勫瓧絎︿覆,鍥犳鍓嶅洓涓兘鍖歸厤涓?鏈鍚庝竴涓洜涓烘暟瀛楀悗榪樺惈鏈夊崟瀛楀瓧絎﹁屼笉鑳藉尮閰?
浣跨敤姝e垯琛ㄨ揪寮忓妶鍒嗗瓧絎︿覆-浣跨敤瀛楃涓茬殑split鏂規硶
String str="钖按,鑱屼綅 濮撳悕;騫撮緞 鎬у埆";
String[] dataArr =str.split("[,\\s;]");
for (String strTmp : dataArr) {
System.out.println(strTmp);
}
String綾葷殑split鍑芥暟鏀寔姝e垯琛ㄨ揪寮?涓婁緥涓ā寮忚兘鍖歸厤”,”,鍗曚釜絀烘牸,”;”涓殑涓涓?split鍑芥暟鑳芥妸瀹冧滑涓換鎰忎竴涓綋浣滃垎闅旂,灝嗕竴涓瓧絎︿覆鍔堝垎鎴愬瓧絎︿覆鏁扮粍.
浣跨敤Pattern鍔堝垎瀛楃涓?/strong>
String str="2007騫?2鏈?1鏃?;
Pattern p = Pattern.compile("[騫存湀鏃");
String[] dataArr =p.split(str);
for (String strTmp : dataArr) {
System.out.println(strTmp);
}
Pattern鏄竴涓鍒欒〃杈懼紡緇忕紪璇戝悗鐨勮〃鐜版ā寮?,瀹冪殑split鏂規硶鑳芥湁鏁堝妶鍒嗗瓧絎︿覆.
娉ㄦ剰鍏跺拰String.split()浣跨敤涓婄殑涓嶅悓.
浣跨敤姝e垯琛ㄨ揪寮忚繘琛屽瓧絎︿覆鏇挎崲
String str="10鍏?1000浜烘皯甯?10000鍏?100000RMB";
str=str.replaceAll("(\\d+)(鍏億浜烘皯甯亅RMB)", "$1錕?);
System.out.println(str);
涓婁緥涓?妯″紡“(\\d+)(鍏億浜烘皯甯亅RMB)”鎸夋嫭鍙峰垎鎴愪簡涓ょ粍,絎竴緇刓\d+鍖歸厤鍗曚釜鎴栧涓暟瀛?絎簩緇勫尮閰嶅厓,浜烘皯甯?RMB涓殑浠繪剰涓涓?鏇挎崲閮ㄥ垎$1琛ㄧず絎竴涓粍鍖歸厤鐨勯儴鍒嗕笉鍙?鍏朵綑緇勬浛鎹㈡垚錕?
鏇挎崲鍚庣殑str涓猴駿10 錕?000 錕?0000 錕?00000
浣跨敤matcher榪涜鏇挎崲
Pattern p = Pattern.compile("m(o+)n",Pattern.CASE_INSENSITIVE);
// 鐢≒attern綾葷殑matcher()鏂規硶鐢熸垚涓涓狹atcher瀵硅薄
Matcher m = p.matcher("moon mooon Mon mooooon Mooon");
StringBuffer sb = new StringBuffer();
// 浣跨敤find()鏂規硶鏌ユ壘絎竴涓尮閰嶇殑瀵硅薄
boolean result = m.find();
// 浣跨敤寰幆鎵懼嚭妯″紡鍖歸厤鐨勫唴瀹規浛鎹箣,鍐嶅皢鍐呭鍔犲埌sb閲?br />
while (result) {
m.appendReplacement(sb, "moon");
result = m.find();
}
// 鏈鍚庤皟鐢╝ppendTail()鏂規硶灝嗘渶鍚庝竴嬈″尮閰嶅悗鐨勫墿浣欏瓧絎︿覆鍔犲埌sb閲岋紱
m.appendTail(sb);
System.out.println("鏇挎崲鍚庡唴瀹規槸" + sb.toString());
浣跨敤Mather楠岃瘉IP鍦板潃鐨勬湁鏁堟?/p>
楠岃瘉鍑芥暟:
public static boolean isValidIpAddr(String ipAddr){
String regx="(\\d+).(\\d+).(\\d+) .(\\d+)";
if(Pattern.matches(regx, ipAddr)){
Pattern pattern=Pattern.compile(regx);
Matcher mather=pattern.matcher(ipAddr);
while(mather.find()){
for(int i=1;i<=mather.groupCount();i++){
String str=mather.group(i);
int temp=Integer.parseInt(str);
if(temp>255 || temp<1){
return false;
}
}
}
}
else{
return false;
}
return true;
}
鎵ц璇彞:
String[] ipArr = { "1.2.3.4", "3.2.1.5", "999.244.17.200", "233.200.18.20",
"2.1.0.18", "0.2.1.19" };
for (String str : ipArr) {
if (isValidIpAddr(str)) {
System.out.println(str + "鏄悎娉曠殑IP鍦板潃");
} else {
System.out.println(str + "涓嶆槸鍚堟硶鐨処P鍦板潃");
}
}
鎵ц緇撴灉:
1.2.3.4鏄悎娉曠殑IP鍦板潃
3.2.1.5鏄悎娉曠殑IP鍦板潃
999.244.17.200涓嶆槸鍚堟硶鐨処P鍦板潃
233.200.18.20鏄悎娉曠殑IP鍦板潃
2.1.0.18涓嶆槸鍚堟硶鐨処P鍦板潃
0.2.1.19涓嶆槸鍚堟硶鐨処P鍦板潃