Regex只要有兩個功能: 模式的檢驗與替換
在開始之前先簡單介紹一下Regex的基礎,以下為我做的摘錄:
表示匹配元素的符號
'.' 符號匹配所有字元,包括空格、Tab字元甚至分行符號。
'[]' 方括弧裡面指定參與匹配的字元. eg. Regex“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。
'(|)' “|”操作符的基本意義就是“或”運算. eg.要匹配“toon”,使用“t(a|e|i|o|oo)n”。這裡不能使用[],因為[]只允許匹配單個字元。
'^' 否定的標誌 ,如 [^x][a-z]+,表示的首字元不可以為x
'\s':空格標誌 eg. "June 12, 1991 ",則運算式為:[a-z]+\s+[0-9]{1,2},\s*[0-9]{4},如果需要提取其中的月份則需要加上圓括弧進行分組,([a-z]+)\s+[0-9]{1,2},\s*[0-9]{4},這已經涉及到了字串的替換了。
表示匹配次數的符號
'*':o次或多次 '+':1次或多次 '?':0次或1次 '{n}':匹配n次 '{n,m}':匹配n-m次
如 999-88789-9800 則Regex為 :[0-9]{3}\-[0-9]{5}\-[0-9]{4},如果999887899800也算正確的話可以改為:[0-9]{3}\-?[0-9]{5}\-?[0-9]{4}
一些快捷的符號
\d:[0-9] \D:[^0-9] \w:[A-Z0-9] \W[^A-Z0-9] \s:[\t\n\r\f] \S:[^\t\n\r\f]
因此我們可以將 [0-9]{3}\-[0-9]{5}\-[0-9]{4} 修改為:\d{3}\-\d{5}\-\d{4}
下面我們將使用一些簡單的例子來介紹,需要注意的是在java 和 javascript 使用Regex有一點點不同的地方,我這裡只介紹使用的方法,不具體介紹各種用法(具體參看Javascript中:http://www.iteye.com/topic/481228 ,java中 :http://blog.csdn.net/b10090120/article/details/7784410)
我們針對字串:<peter> <lionel>\"www.163.com\"<kenny><>1234 5678 進行操作
Javascript中
<html>
<head>
<title>reg</title>
<script type="text/javascript">
var str="<peter>dsadasdas<lionel>\"www.163.com\"<kenny><>";
var reg=/(<[^>]*>)/g; //g (全文尋找) i (忽略大小寫)m (多行尋找)
//查詢到所有合格子字串
var cc = str.match(reg);
alert(cc[2]);
//將reg為標準分割數組
arr = str.split(reg);
alert(arr[1]);
//replace,替換與Regex匹配的子串,其中分組字串放在$1~$9中
alert( str.replace(reg,'替代它'));
alert(str.replace(reg,"<imgsrc='$1'></img>"));
var ree = /(\d)\s(\d)/;
alert( str.replace(ree,"$2,$1"));//在這個裡面$1表示第一個分組1234,$2則表示5678
//在字串中尋找時我們常用indexOf,與之對應用於正則尋找的方法是search
alert(str.search(reg));//返回尋找到的字串開始下標0</script>
</head>
<body>
Reg測試
</body>
</html>
注附帶:
var re=/@(\S+)+(\s)?/g; //篩選出 @xx ,並進行替換
str=str.replace(re,'<a class="marked-name" href="<person>" rel="weiboAtem-username" name="$1" >@$1</a>');
//拼湊的Regex
var userFacesCn ="微笑" ;
var userFaces ="pic_1.gif";
var reg= new RegExp("\\["+userFacesCn+"\\]",'g');
weiboContent = weiboContent.replace(reg,"["+userFaces+"]");
var osVersion = "Ubuntu 8";其中的8表示系統主要版本號
exec返回的數組第1到n元素中包含的是匹配中出現的任意一個子匹配
re=/^[a-z]+\s+(\d+)$/i;用()來建立子匹配
arr =re.exec(osVersion);
alert(arr[0]);整個osVersion,也就是Regex的完整匹配
alert(arr[1]);8,第一個子匹配,事實也可以這樣取出主要版本號
alert(arr.length);2
osVersion = "Ubuntu 8.10";取出主要版本號和次版本號碼
re = /^[a-z]+\s+(\d+)\.(\d+)/i;.是Regex元字元之一,若要用它的字面意義須轉義
arr = re.exec(osVersion);
alert(arr[0]);完整的osVersion
alert(arr[1]);8
alert(arr[2]);10
Java中
String s = "<peter>dddd<lionel>\"www.163.com\"<kenny><>";
Pattern p =
Pattern.compile("(<[^>]*>)");
Matcherm = p.matcher(s);
List<String>result=newArrayList<String>();
while(m.find()){
result.add(m.group());
}
for(String s1:result){
System.out.print(s1+’,’);
}
輸出結果為:<peter>,<lionel>,<kenny>,