如何利用正規表示式來處理字串

2021-08-29 14:26:45 字數 1798 閱讀 4159

正規表示式(regular expression記為re)常用於文字檢索和計算生物學中,它可以表示比單字串、字串集合、擴充套件字串更複雜的搜尋模式。

正規表示式有三種最基本的運算:並、連線、閉包。分別記為「|」、「.」、「*」。如果re1

和re2

都是正規表示式,則(

re1

.re2

)、(re1

|re2

)、(re1

*)也都是正規表示式。

如圖1是利用正規表示式知識來處理字串的經典方法。

首先,正規表示式被解析成一棵表示式樹,然後將表示式樹轉換成非確定有限自動機。然後就是5.1節所講的利用自動機處理字串。在這裡,其實從nfa直接處理也是

可行的,但由於要儲存活動狀態列表,並且每讀入乙個新文字字元都要更新這個列表,因此這個演算法處理速度通常較慢。

圖2是乙個正規表示式(ab|ba)(aa)*的解析樹表示。

thompson構造法是一種從正規表示式構造自動機的方法.它使用自動機直接表示乙個正規表示式對應的樹表示,並且使用

-轉移來簡化這個表示過程。

thompson

構造法的核心思想是形成正規表示式re

對應的樹表示tre

,然後自底向上地對樹tre

的每個節點v

,構造乙個自動機th(v)

來識別以v

為根的子樹所表達的語言。根據不同型別的中間節點和葉節點,有不同的自動機構造方法,具體情況如下:

①:空字的構造方法。自動機由 -轉移連線兩個節點而組成。

②:單字元a

的構造方法,它與空詞的構造方法類化,只不過轉移是使用字元來標識,而不是空字串。

③:連線節點的構造法。瘵兩個子節點vl和vr 對應的thompson自動機合併,即第乙個自動機和終止狀態成為第二個自動機的初始狀態。

④:並節點的構造法:就像電路圖中的併聯一樣,必須通過兩個子節點對應的自動機vl和vr中的乙個。這種構造需要-轉移,在構造中,要新增二個狀態,乙個初始狀態i,從它有二個-轉移分別到th(vl)和th(vr)的初始狀態;另乙個是終止狀態f,從自動機th(vl)和th(vr)的終止狀態分別由-轉移到達終止狀態f。

⑤:星節點的構造法:因為節點的唯一子節點v*可以被重複任意多次,所以需要建立乙個從自動機th(v*)的終止狀態指向其初始狀態的-轉移。但是,星符號也意味著自動機th(v*)也可能被忽略。因此,需要建立初始節點i和終結節點f,並用乙個-轉移將他們連線起來。另外,再建立兩條-轉移分別用來從節點i指向th(v*)的初始狀態以及從th(v*)的終止狀態指向f。如圖。

正規表示式和自動機密切相關,都是處理字串問題的重要工具。

利用正規表示式將字串分組處理

正規表示式在指令碼語言中所起的作用是不言而喻的,熟練掌握正規表示式,對於每個指令碼開發人員都至關重要,下面,我以近期工作中遇到的實際例子來介紹如何使用正規表示式在對字串進行處理。需求 有乙個字串 如下所示 其特點是都多個括起,每個後用逗號隔開,結尾沒有逗號,中的字串也用逗號隔開 要求將此字串以為單位...

正規表示式用於字串處理

正規表示式用於字串處理 表單驗證等場合,實用高效。現將一些常用的表示式收集於此,以備不時之需。匹配中文字元的正規表示式 u4e00 u9fa5 評注 匹配中文還真是個頭疼的事,有了這個表示式就好辦了 匹配雙位元組字元 包括漢字在內 x00 xff 評注 可以用來計算字串的長度 乙個雙位元組字元長度計...

利用正規表示式驗證Email字串

public class registercheck final pattern pattern pattern.compile pattern1 final matcher mat pattern.matcher email if mat.find return tag email檢查 param...