正则表达式——(一)
正則表達式在大量的文本文件中對用戶所關心的數據進行匹配有著十分重要的作用。
正則表達式的可以通用于SQL語句中、java腳本以及python腳本中。
?
正則式的語法比較統一而且易學,但是將正則用于實際的工作環境中,
還是相當有難度的,因為它的靈活度和變化都是很大的。
?
所以最好的掌握正則式在實際應用中的編寫,而非死記硬背一些條條框框的規則。
?
本文的重點是介紹正則是的語法規則以及如何使用java來編寫一個測試正則表達式的小程序。
這樣的話,我們就可以將每次學到的正則語法規則應用于實際操作中去,
隨時檢驗和修改自己的正則表達式了。
?
對于正則表達式的定義是這樣的:
正則表達式(regular? expressions)是一種描述字符串集的方法,是以字符串集中的共有特征為依據的。
使用正則表達式可以用于搜索、編輯以及操作文本和數據。
在java中的java.util.regex這個包的下面有相關的類
Matcher和Pattern已經實現了對正則表達式的規范化描述,以及測試匹配工作。
?
首先介紹一下,使用java語句來編寫一個小程序,
以便于實時檢查所寫的正則式是否可以達到搜索、匹配輸入各種類型文本的目的
下面是LZ編寫的測試源代碼
有一點值得留意的是:
1.對于//s?這種需要進行轉義處理的字符串,
在這個小程序中是無需進行轉義處理的,這應該是java的regex中的相應類在實現的時候已經進行預處理的原因吧:
總之//s?在程序中只需要寫/s?就可以,如果仍然寫//s?的話,原本按照正則表達式寫的語句可以檢查到的字段,
會顯示檢查不到的?。
2.另外值得注意的就是,在輸入正則表達式的時候,除了必要的漢字匹配需要使用中文輸入法之外,
其余全部應該使用純英文的輸入格式。
/** the coding below is used to check the regex you write* after running could get the results you want*/package regex_test;import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern;public class Main {public static void main(String[] args) throws IOException{String regexString;String checkText;BufferedReader br =new BufferedReader(new InputStreamReader(new BufferedInputStream(System.in)));while(true){System.out.print("\n 請輸入您的正則表達式: \n");
regexString = new String(br.readLine());
Pattern pattern = Pattern.compile(regexString);
System.out.print("請輸入您所要搜索、匹配的測試文本: \n");
checkText = new String(br.readLine());
Matcher matcher = pattern.matcher(checkText);
boolean found = false;
while(matcher.find()){
System.out.println(" 輸入的文本: \"" + checkText+
"搜索的匹配字段:\"" +matcher.group()+
" \"起始位序 "+ matcher.start()+
" 結束位序 "+matcher.end()+".\n");
System.out.println("使用正則表達式:\" "+regexString+
" \" 可以在輸入文本中搜索得到匹配字段\n\n");
found = true;}//while_inner
if(!found){System.out.println("正則表達式\" "+regexString+"\" 不能在測試文本中搜索到字段:\n ");}}//while_outer}//main}//Main_class
下面簡單介紹一下,正則表達式的簡單語法:
正則式所識別的所有元字符有:
() [] {} \ ^ $ | ? * + . -有兩種方法可以將元字符強制轉換為普通字符:
1.在元字符前面加上 \?? 反斜線這個字符。
2.把需要轉換為普通字符的字符串放置到\Q?? \E之間即可。
?
對于字符的一些基礎表達式的說明:
[abc] : 表示的是在匹配字符串中只要有 a 或是b 或是c 就會實現匹配成功
當然這個是簡單的字符,如果是字符串的話需要這么寫:
?
[cat|bat|rat]:這個表示的意思就是,如果輸入的待檢查文本中只要有
cat,bat,rat其中的一個就會匹配成功。
?
[^abc]: 這個表示的是,如果在輸入的待檢查文本中只要沒有除了a或b或c
一個,就說明匹配成功。
?
[a-zA-Z]: 如果帶匹配的字符出現在[a,z]或是[A,Z]之間,就說明匹配成功;
其中區域端點a,z,A,Z 也算在內。
[a-d[m-p]]:這種表示方法等同于[a-dm-p],解釋同上,
從某種角度上來說,這是一種對兩個集合[a-d]和[m-p]并集的處理,
也就是說待檢查匹配的字符如果是出現在a-d 或是 m-p之間的字符,
那么此次匹配是成功的。
?
[a-z&&[def]]: 這個正則式描述的是,輸入的字符如果在a到z之間并且也同時是
d e f 三個字符串中的一個的話,那么此次匹配檢測成功,
但是這個例子舉得有一點特殊,
因為這個&&從集合的角度上來說是去兩個集合的交集。
但是這個例子所選取的兩個集合剛好后者是前者的子集,
所以實際上改正則表達式等價于[def]
?
[a-z&&[^bc]]: 除了b 和c兩個字符之外,a到z的所有字符
相當于差集,而^bc相當于對b或c去反,
而或去反就相當于^b & ^c,即二者的非去并集。
所以整體上來看是:只要字符是
去掉 b且去掉c 的a到z的任意一個字符,該匹配都是成功的。
?
[a-z&&[^m-p]]: 同樣也是差集,描述的是帶匹配的字符。
如果是a到z,并且不包括m到p的,任意字符,那么匹配成功。
也相當于[a-lq-z]這種的并集的表示方法。
?
關于預定義字符類:
?
.:可以用來匹配任何字符
\d: 是數字字符[0-9]
\D: 這個描述的是非數字字符:[^0-9]
\s: 描述的是空白字符,只要是[\t\n\x0B\f\r]這里面的都可以。
\w:這個是用來描述單詞字符的:[a-zA-Z_0-9]
\W: 這個是用來描述非單詞字符的:[^\w]
?
目前,LZ暫時僅用到這些,如果以后用到其他的表達式在往上面填充吧....
轉載于:https://www.cnblogs.com/inuyasha1027/p/regex_introduce.html
總結
以上是生活随笔為你收集整理的正则表达式——(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Netbeans调试PHP
- 下一篇: hibernate 简单笔记(一)