閱讀500 返回首頁    go 阿裏雲 go 技術社區[雲棲]


android開發之正則表達式(EditText)

本文章介紹了關於在android手機開發時的一些常用的正則表達式規則與用法,因為android開發和其它程序差不多,當然也需要正則表達式哦。

editText正則表達式的使用 檢查輸入是否符合規則

import Android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
/**
* Class which shows how to validate user input with regular expression
*
* @author FaYnaSoft Labs
*/
public class Main extends Activity {
private EditText editText;
private Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText = (EditText) findViewById(R.id.textId);
editText.setText("EditText element");
button = (Button) findViewById(R.id.btnId);
button.setText("Check");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(checkString(editText.getText().toString())) {
editText.setText("Corect");
}
}
});
}
/**
* This method checks if String is correct
* @param s - String which need to check
* @return value of matching
*/
private boolean checkString(String s) {
return s.matches("\w*[.](Java|cpp|class)");
}
}
 
正則表達式查找字符
 
文章分類:移動開發
String s_Result="Distance: 2.8km (about 9 mins)";
 
//Distance parsing
Pattern p = Pattern.compile("Distance: (\d+(\.\d+)?)(.*?)\b");
Matcher m = p.matcher(s_Result);
if(m.find()){
MatchResult mr=m.toMatchResult();
f_Distance=mr.group(1);//2.8
m_DistanceUnit=mr.group(3);//km
}
 
//Time parsing
p = Pattern.compile("about (\d+(\.\d+)?) (.*)\b");
m = p.matcher(s_Result);
if(m.find()){
MatchResult mr=m.toMatchResult();
f_timeEst=mr.group(1);//9
m_timeEstUnit=mr.group(3);//min
}
或者
String s_Result="Distance: 2.8km (about 9 mins)";
Pattern p = Pattern.compile("(\d+(\.\d+)?) ?(\w+?)\b");
Matcher m = p.matcher(s_Result);
while(m.find()){
MatchResult mr=m.toMatchResult();
String value=mr.group(1);//2.8 and 9 come here
String units=mr.group(3);//km and mins come here
}

正則表達式以過濾特殊字符

在網上找了好久也沒找到個合適的正則表達式以過濾特殊字符;自己學習了下,寫了兩個,實現要求。

Java 代碼

// 過濾特殊字符 

public   static   String StringFilter(String   str)   throws   PatternSyntaxException   {    
// 隻允許字母和數字      
// String   regEx  =  "[^a-zA-Z0-9]";                    
// 清除掉所有特殊字符 
String regEx="[`~!@#$%^&*()+=|{}':;',\[\].<>/?~!@#¥%……& amp;*()——+|{}【】‘;:”“’。,、?]"; 
Pattern   p   =   Pattern.compile(regEx);    
Matcher   m   =   p.matcher(str);    
return   m.replaceAll("").trim();    
}    
@Test        
public    void   testStringFilter()   throws   PatternSyntaxException   {    
String   str   =   "*adCVs*34_a _09_b5*[/435^*&城池()^$$&*). {}+.|.)%%*(*.中國}34{45[]12.fd'*&999下麵是中文的字符¥……{}【】。,;’“‘”?";    
System.out.println(str);    
System.out.println(StringFilter(str));    
}   

用的是JUnit測試的,當然你可以改成main

 

Java正則表達式學習:

因為正則表達式是一個很龐雜的體係,此例僅舉些入門的概念,更多的請參閱相關書籍及自行摸索。

\ 反斜杠

t 間隔 ('u0009')

n 換行 ('u000A')

r 回車 ('u000D')

d 數字 等價於[0-9]

D 非數字 等價於[^0-9]

s 空白符號 [tnx0Bfr]

S 非空白符號 [^tnx0Bfr]

w 單獨字符 [a-zA-Z_0-9]

W 非單獨字符 [^a-zA-Z_0-9]

f 換頁符

e Escape

b 一個單詞的邊界

B 一個非單詞的邊界

G 前一個匹配的結束

 

^為限製開頭

^java     條件限製為以Java為開頭字符

$為限製結尾

java$     條件限製為以java為結尾字符

. 條件限製除n以外任意一個單獨字符

java..     條件限製為java後除換行外任意兩個字符

 

 

加入特定限製條件「[]」

[a-z]     條件限製在小寫a to z範圍中一個字符

[A-Z]     條件限製在大寫A to Z範圍中一個字符

[a-zA-Z] 條件限製在小寫a to z或大寫A to Z範圍中一個字符

[0-9]     條件限製在小寫0 to 9範圍中一個字符

[0-9a-z] 條件限製在小寫0 to 9或a to z範圍中一個字符

[0-9[a-z]] 條件限製在小寫0 to 9或a to z範圍中一個字符(交集)

 

[]中加入^後加再次限製條件「[^]」

[^a-z]     條件限製在非小寫a to z範圍中一個字符

[^A-Z]     條件限製在非大寫A to Z範圍中一個字符

[^a-zA-Z] 條件限製在非小寫a to z或大寫A to Z範圍中一個字符

[^0-9]     條件限製在非小寫0 to 9範圍中一個字符

[^0-9a-z] 條件限製在非小寫0 to 9或a to z範圍中一個字符

[^0-9[a-z]] 條件限製在非小寫0 to 9或a to z範圍中一個字符(交集)

 

在限製條件為特定字符出現0次以上時,可以使用「*」

J*     0個以上J

.*     0個以上任意字符

J.*D     J與D之間0個以上任意字符

 

在限製條件為特定字符出現1次以上時,可以使用「+」

J+     1個以上J

.+     1個以上任意字符

J.+D     J與D之間1個以上任意字符

 

在限製條件為特定字符出現有0或1次以上時,可以使用「?」

JA?     J或者JA出現

 

限製為連續出現指定次數字符「{a}」

J{2}     JJ

J{3}     JJJ

文字a個以上,並且「{a,}」

J{3,}     JJJ,JJJJ,JJJJJ,???(3次以上J並存)

文字個以上,b個以下「{a,b}」

J{3,5}     JJJ或JJJJ或JJJJJ

兩者取一「|」

J|A     J或A

Java|Hello     Java或Hello

 

「()」中規定一個組合類型

比如,我查詢<a href="index.html">https://www.hzhuti.com </a>中<a href></a>間的數據,可寫作<a.*href=".*">(.+?)</a>

 

在使用Pattern.compile函數時,可以加入控製正則表達式的匹配行為的參數:

Pattern Pattern.compile(String regex, int flag)

 

flag的取值範圍如下:

Pattern.CANON_EQ     當且僅當兩個字符的"正規分解(canonical decomposition)"都完全相同的情況下,才認定匹配。比如用了這個標誌之後,表達式"au030A"會匹配"?"。默認情況下,不考慮"規 範相等性(canonical equivalence)"。

Pattern.CASE_INSENSITIVE(?i)     默認情況下,大小寫不明感的匹配隻適用於US-ASCII字符集。這個標誌能讓表達式忽略大小寫進行匹配。要想對Unicode字符進行大小不明感的匹 配,隻要將UNICODE_CASE與這個標誌合起來就行了。

Pattern.COMMENTS(?x)     在這種模式下,匹配時會忽略(正則表達式裏的)空格字符(譯者注:不是指表達式裏的"\s",而是指表達式裏的空格,tab,回車之類)。注釋從#開 始,一直到這行結束。可以通過嵌入式的標誌來啟用unix行模式。

Pattern.DOTALL(?s)     在這種模式下,表達式'.'可以匹配任意字符,包括表示一行的結束符。默認情況下,表達式'.'不匹配行的結束符。

Pattern.MULTILINE

(?m)     在這種模式下,'^'和'$'分別匹配一行的開始和結束。此外,'^'仍然匹配字符串的開始,'$'也匹配字符串的結束。默認情況下,這兩個表達式僅僅匹 配字符串的開始和結束。

Pattern.UNICODE_CASE

(?u)     在這個模式下,如果你還啟用了CASE_INSENSITIVE標誌,那麼它會對Unicode字符進行大小寫不明感的匹配。默認情況下,大小寫不敏感的 匹配隻適用於US-ASCII字符集。

Pattern.UNIX_LINES(?d)     在這個模式下,隻有'n'才被認作一行的中止,並且與'.','^',以及'$'進行匹配。



最後更新:2017-04-04 07:03:42

  上一篇:go Mac os X 常用技巧
  下一篇:go Oracle中的常用權限視圖