正則表達式基礎知識


這篇呢,主要就是關於正則表達式的一些介紹和常見應用軟件及編程語言對正則表達式的支持等內容。。。

 

1、正則表達式(regular expression,):簡稱regex,可以理解為一種工具。

2、正則表達式的兩種基本用途:搜索(匹配)和替換(匹配並替換)。

比如:把URL地址字符串替換為可點擊的URL地址場景:

http://www.baidu.com/

使用正則表達式替換為可點擊URL地址的場景,替換結果為:

<A HREF="http://www.baidu.com">http://www.baidu.com/</A>

3、定義:正則表達式是一些用來匹配和處理文本的字符串,使用正則表達式語言創建,是內嵌於其他語言或軟件產品中的“迷你”語言,

幾乎所有的語言或工具都支持它。

下面列舉一些合法的正則表達式

Ben
.
www\.forfa\.com
[a-zA-ZQ-9_.]*
<[Hh]1>.*</[Hh]1>
\r\n\r\n
\d{3,3}-\d{3,3}-\d{4,4}

4、一般來說,應用程序大多使用菜單選項和對話框來訪問正則表達式,程序設計語言大多在函數或對象類中使用正則表達式。

5、常見應用軟件和編程語言對正則表達式的支持匯總如下:

A.1 grep

grep是一種用來對文件或標准輸入文本進行文字搜索的Unix工具,支持基本、擴展和Perl正則表達式。

-E:使用擴展正則表達式

-G:使用基本正則表達式

-P:使用Perl正則表達式

注意事項:

①默認情況下,grep將把包含着匹配的各個文本全部顯示,如果只想查看匹配結果,請使用-o選項;

②使用-v選項將對整個操作匹配操作進行求非————只顯示不匹配的文本行;

③使用-c選項只顯示匹配的總數而不是此次匹配的細節;

④grep工具只能進行搜索操作,不能進行替換操作;

 

A.2 javascript

javascript 1.x版本在string和RegExp對象的以下幾個方法里實現了正則表達式處理。

exec:一個用來搜索一個匹配的RegExp方法

match:一個用來匹配一個字符串的string方法

replace:一個用來完成替換操作的string方法

search:一個用來測試在某給定字符串里是否存在着一個匹配的string方法

split:一個用來把一個字符串拆分為多個子串的string方法

test:一個用來測試在某給定字符串里是否存在着一個匹配的RegExp方法

△JavaScript度對正則表達式的支持源自Perl語言。

注意事項:

①JavaScript使用命令行選項來管理全局的區分大小寫搜索,g選項激活全局搜索功能,i選項讓匹配操作不區分字母大小寫,這兩個選項可組合為gi;

②其他命令行選項包括:m,支持多行字符串;s,支持單行字符串;x,忽略正則表達式模式里的空白字符;

③在使用回溯引用時,$'將返回被匹配字符串前面的所有東西,$`將返回被匹配字符串后面的所有東西;$+將返回最后一個被匹配的子表達式,$&將返回被匹配到的所有東西;

④JavaScript提供一個名為RegExp的全局對象,在執行完一個正則表達式后,可以通過這個對象獲得與這次執行有關的信息;

⑤JavaScript不支持POSIX字符類;

⑥JavaScript不支持\A和\Z。

 

A.3 Microsoft ASP

所有ASP腳本語言都支持正則表達式,通過一個名為RegExp的對象提供,其包含以下幾個方法:

Excute:執行一個正則表達式的搜索操作

Replace:執行一個”搜索和替換”操作

Test:檢查一個字符串是否與一個給定的字符串匹配

ASP正則表達式還有一些局限性,下面是注意事項:

①執行操作之前必須先創建並填充一個Regexp對象的實例;

②正則表達式被存放在Regexp.Pattern里;

③支持全局限定符和大小寫限定符;前者是一個存放在Regexp.Global里的布爾值,后者是一個存放在RegExp.IgnoreCase里的布爾值;

④Excute()方法將返回一個Match對象,通過這個對象可以訪問到所有的匹配;

⑤不支持向前查找(?=和?!)和向后查找(?>=和?<!)。

 

A.4 Macromedia ColdFusion

Macromedia ColdFusion通過以下四個函數提供正則表達式支持:

REFid:執行搜索

REFindNoCase():執行不區分字母大小寫的搜索

REReplace:執行替換

REReplaceNoCase():執行不區分字母大小寫的替換

ColdFusion支持與Perl語言兼容的正則表達式,以下是注意事項:

①.總是匹配換行符;

②使用回溯引用時,必須使用\n代替$n來引用回溯引用變量。ColdFusion將自動把替換字符串里的所有$n字符解釋為它們的轉義含義;

③不必對替換字符串里的反斜線字符進行轉義,ColdFusion將自動把他們解釋為它們的轉義含義。但大小寫轉換序列或它們的轉義版本(例如\u或\\u)屬於例外;

④嵌入限定符((?i))總是影響整個表達式,即使它們只出現在某個子表達式內部;

⑤ColdFusion不支持在替換字符串里使用\Q、\u\L或\l\U;

⑥ColdFusion不支持向后查找(?<=和?<!);

⑦ColdFusion不支持條件處理;

⑧ColdFusion不支持\x、\N、\p和\C;

 

A.5 Microsoft.NET

PS:Microsoft ASP.NET、Microsoft Visual Studio.NET和Microsoft C#里面的正則表達式都由.NET Framework提供。

NET Framework通過它的基本類庫提供了強大和靈活的正則表達式支持,這些支持在所有的.NET語言和工具里都可以使用。

.NET里正則表達式支持是通過Regex類(以及其他一些輔助類)提供的;Regex類有以下一些方法:

①IsMatch():測試在某個給定的字符里是否可以找到一個匹配;

②Match():搜索一個單個的匹配,該匹配將被作為一個Match對象;

③Matcher():搜索所有的匹配,它們將被返回一個Match-collection對象;

④Replace():在一個給定的字符串上進行替換操作;

⑤Split():把一個字符串拆分為一個字符串數組;

利用各種包裝器函數,在無須創建和使用一個Regex類的情況下也可以執行一個正則表達式,例如:

①Regex.IsMatch():功能上等價於IsMatch()方法;

②Regex.Match():功能上等價於Match()方法;

③Regex.Matches():功能上等價於Matches()方法;

④Regex.Replace():功能上等價於Replace()方法;

⑤Regex.Split():功能上等價於Sqlit()方法;

下面是一些與.NET正則表達式支持有關的注意事項:

①要想使用正則表達式,必須用Imports System.Text.Regu-lar-Expressions語句導入正則表達式對象;

②如果只需要臨時使用正則表達式,上述的包裝器函數是理想的選擇;

③正則表達式選項需要使用Regex.Options屬性給出,它是一個RegexOptions枚舉集合,可以對這個集合的各有關成員如IgnoreCase、Multiline、Singleline等進行設置;

④.NET支持命名捕獲,即對子表達式進行命名。命名一個子表達式語句是?<name>,引用這個回溯引用的語法是\k<name>,在一個替換模式里引用它的語法是$<name>;

⑤使用回溯引用時,$`(反引號)將返回被匹配字符串前面的所有東西,$'(單引號)將返回被匹配字符串后面的所有東西,$+將返回最后一個被匹配的子表達式,$_將返回整個

  原始字符串,$&將返回整個被匹配的字符串;

⑥.NET Framework不支持使用\E、\l、\L和\U進行大小寫轉換;

⑦.NET Framework不支持POSIX字符類;

 

A.6 MySQL

MySQL對正則表達式的支持體現在允許在where字句里使用如下格式的表達式:

REGEXP "erpression"

下面是一條使用了正則表達式的MySQL語句的完整語法:

select * from table where REGEXP 'pattern';

MySQL正則表達式支持很有用,功能也很強大,但它還算不上是一個完備的正則表達式表現;以下是它的不足之處:

①只提供搜索支持,不支持使用正則表達式進行替換操作;

②默認情況下,正則表達式搜索不區分字母的大小寫;如果需要區分大小寫,必須再增加一個BINARY關鍵字(放在REGEXP和模式之間);

③用[[:<:]]來匹配一個單詞的開頭,用[[:>:]]來匹配一個單詞的結束;

④不支持向前預測;

⑤不支持嵌入條件;

⑥不支持八進制字符搜素;

⑦不支持\a、\b、\e、\f和\v;

⑧不支持回溯引用;

 

A.7 Perl

Perl可以說是各種正則表達式的“祖宗”,各種實現幾乎斗魚Perl兼容,正則表達式是Perl的核心組件之一,如果需要在Perl腳本里使用正則表達式,只需如下

給出一個操作和相應模式即可:

①m/pattern:匹配給定的模式;

②s/pattern/pattern:執行一個替換操作;

③qr/pattern:返回一個Regex對象供今后使用;

④sqlit():把一個字符串拆分為子字符串;

注意事項:

①允許把限定字符放在模式的后面。\i用來表明搜索時不區分字母大小寫,\g用來表明進行全局搜索;

②使用“回溯引用”時,$'將返回被匹配字符串前面所有的東西,$`將返回被匹配字符串后面所有的東西,$+將返回最后一個被匹配的子表達式,$&將返回整個被匹配字符串;

 

A.8 Sun Java

Java對正則表達式的支持是從1.4版本開始的,此前的JRE(Java Runtime Environment,Java運行環境)不支持正則表達式。

Java語言中的正則表達式匹配功能主要通過java.util.regex.Matcher類和以下方法實現:

find():在一個字符串里尋找一個給定模式的匹配;

lookingAt():用一個給定的模式去嘗試匹配一個字符串的開頭;

matches():用一個給定的模式去嘗試匹配一個完整的字符串;

replaceALL():進行替換操作,對所有的匹配都進行替換;

replaceFirst():進行替換操作,只對第一個匹配進行替換;

Matcher類還提供了幾個能讓程序員對特定操作做出更細致調控的方法;此外,java.util.regex.pattern類也提供了幾個簡單易用的包裝器方法:

compile():把一個正則表達式編譯成一個模式;

flags():返回某給定模式的匹配標志;

matches():在功能上等價於剛才介紹的matches()方法;

pattern():把一個模式還原為一個正則表達式;

sqlit():把一個字符串拆分為子字符串;

Sun發布的Java正則表達式支持與Perl語言基本兼容,但請注意一下幾項注意事項:

①要想使用正則表達式,必須先用import java.util.regex.*語句導入正則表達式組件;

②不支持嵌入條件;

③不支持使用\E、\L、\l、\U和\u進行字母大小寫轉換;

④不支持使用[\b]匹配退格符;

⑤不支持\z;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM