編譯原理的正則表達式
㈠ 編譯原理:構造表示「標識符」的正則表達式標識符定義:以字母開頭的字母數字串,標識符可以有後綴,
^([A-Za-z]\w*)([.]([A-Za-z]\w*))*$
不知理解得對不對
比如
(java).(util).(Locale)
java util Locale三組都是以字母開頭,後接單詞字元(即[A-Za-z0-9_]的縮寫\w)的表達式
㈡ 編譯原理正則表達式化簡
你好,語言L={a}{a,b}∗({ϵ}∪({.,_}{a,b}{a,b}∗))L={a}{a,b}
∗
({ϵ}∪({.,_}{a,b}{a,b}
∗
))
這個語言是指,由a開頭,後接任意長度的a、b串,然後再接空串(代表結束)。或者是接以.或_開頭的,後接長度大於等於1的a、b串。
正則表達式(Regular Expression, RE)是一種用來描述正則語言的更緊湊的表示方法。
㈢ 編譯原理中的正則表達式與正規表達式有什麼區別
完全相同,是對regular expression的不同翻譯
㈣ 編譯原理 正則表達式
/^(?!.*001)[01]+$/
㈤ java中的正則表達式跟編譯原理有什麼聯系
首先,正則表達式不僅在Java里有,其它語言裡面也有,它是一個數學上的概念,各個語言中的正則表達式是它的不同形式的實現。
其次,編譯原理的詞法分析里,會用到正則表達式去匹配源程序中的各種token(記號),比如說
int a = 8;
里識別出:
類型名:int
變數名:a
運算符:=
數字:8
結尾分號:;
總之,二者有聯系,但不是一回事。
㈥ 正則表達式概述 什麼是正則表達式
正則表達式概述
正則表達式在程序設計語言中存在著廣泛的應用,特別是用來處理字元串。如匹配字元串、查找字元串、替換字元串等。可以說,正則表達式是一段文本或一個公式,它是用來描述用某種模式去匹配一類字元串的公式,並且該公式具有一定的模式。
本小節將介紹正則表達式的基本概念、第一個正則表達式,以及測試正則表達式的工具Code Architects Regex Tester。
什麼是正則表達式
正則表達式(Regular
Expression)起源於人類神經系統的早期研究。神經生理學家Warren McCulloch和Walter
Pitts研究出一種使用數學方式描述神經網路的方法。1956年,數學家Stephen
Kleene發表了一篇標題為「神經網事件的表示法」的論文,並在該論文中引入了「正則表達式」這一個概念。該論文稱正則表達式是:「正則集的代數」的表達式。因此,採用「正則表達式」這個術語。正則表達式的定義存在多種說法,具體如下:
正則表達式就是用某種模式去匹配一類字元串的公式,主要用來描述字元串匹配的工具。
正則表達式描述了一種字元串匹配的模式。它可以用來檢查字元串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。
正則表達式是由普通字元(如字元a到z)以及特殊字元(稱為元字元)組成的文字模式。正則表達式作為一個模板,將某個字元模式與所搜索的字元串進行匹配。
正則表達式就是用於描述某些規則的工具。這些規則經常用於處理字元串中的查找或替換字元串。換句話說,正則表達式就是記錄文本規則的代碼。
正則表達式就是用一個「字元串」來描述一個特徵,然後去驗證另一個「字元串」是否符合這個特徵。
學過《編譯原理》的讀者可能知道不確定有限自動機(Non-deterministic
finite automaton,簡稱NFA)和確定有限自動機(Deterministic finite
automaton,簡稱DFA)。其實,正則表達式是一個不確定有限自動機。NFA和DFA的最大區別在於它們的狀態轉換函數。NFA可以對同一個字元串產生多種理解方式,而DFA則只有唯一的一種理解方式。也正因為如此,NFA在匹配過程中可能會回溯,NFA的效率一般要低於DFA。因此,在書寫正則表達式時盡量減少回溯來提高正則表達式的效率。
如果你使用過Windows或DOS下用於文件查找的通配符*和?,那麼你不難理解正則表達式。如果你需要查找所有Word文檔,那麼可能使用表達式*.doc。其中,字元*是一個通配符,它可以代表任意字元串。正則表達式和通配符具有相似性,它也可以使用一些字元(如字元.)表示任意字元。然而,它比通配符更具有精確性。
在正則表達式中,匹配是最常用的一個詞語,它描述了正則表達式動作結果。給定一段文本或字元串,使用正則表達式從文本或字元串中查找出符合正則表達式的字元串。有可能文本或字元存在不止一個部分滿足給定的正則表達式,這時每一個這樣的部分被稱為一個匹配。其中,匹配存在下面3種類型:
形容詞性的匹配,即一個字元串匹配一個正則表達式。
動詞性的匹配,即在文本或字元串里匹配正則表達式。
名詞性的匹配,即字元串中滿足給定的正則表達式的一部分。
正則表達式的應用非常廣泛,特別是在字元串處理方面。目前來說,正則表達式已經在很多軟體中得到廣泛了應用,如Linux、Unix、HP等操作系統,C#、PHP、Java等程序開發環境,以及很多的應用軟體中,都可以看到正則表達式的這樣或那樣的應用。正則表達式常見的應用如下:
驗證字元串,即驗證給定的字元串或子字元串是否符合指定特徵,譬如驗證是否是合法的郵件地址、驗證是否為合法的HTTP地址等。
查找字元串,從給定的文本中查找符合指定特徵的字元串,比查找固定字元串更加靈活方便。
替換字元串,即把給定的字元串中的符合指定特徵的子字元串替換為其他字元串,比普通的替換更強大。
提取字元串,即從給定的字元串中提取符合指定特徵的子字元串。
㈦ [編譯原理]構造一個正則表達式,它接受S={a, b, c}上符合以下規則的字元串:
(1)如果以a開頭,則串內至少包含一個c ----> 可以寫成a(a|b|c)*c(a|b|c)*
(2)如果以b開頭,則串內至多包含一個 a ----> 有兩種情況,一個是不包含a,可以寫成b(b|c)*;另一個是只有一個a,可以寫成b(b|c)*a(b|c)* ,結合起來就是b(b|c)* | b(b|c)*a(b|c)*
(3)綜合前面(1)和(2),有
a(a|b|c)*c(a|b|c)* | b(b|c)* | b(b|c)*a(b|c)*
㈧ 編譯原理中, regular expression (正則表達式)和regular language(正則語言)有什麼區別
正則表達式是對正則語言的一個描述。正則語言是一個集合,這個集合里的元素都滿足正則表達式描述的規則。
㈨ 編譯原理:c語言標識符的正則表達式
C語言中的標識符:
標識符由字母、數字、下劃線「_」組成,並且首字母不能是數字.
java語言中的標識符:
標識符由字母、數字、下劃線「_」、美元符號「$」組成,並且首字母不能是數字。
一般標識符由字母、數字、下劃線「_」組成
如果只能以下劃線、英文字母開頭,後跟單詞字元的話:
^[A-Za-z_][A-Za-z0-9_]*$
㈩ 編譯原理-用正則表達式表示下面的內容
(1)[a-z]
(2)^[24680]+$ 所有數字都為偶數 ^(?=[1-9])\d*[02468]$|^[02468]$ 所有偶數
(3)^(?=[a-zA-Z0-9]+).*@[^\.]+\.[a-z]+$
測試有效
