国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java & regex(2-3)

2019-11-18 14:38:00
字體:
來源:轉載
供稿:網友

  java & regex(2-3)
§5 連接
核心3點是rs表達式。這個連接運算,再說就似乎太羅索了。把單字符順著寫就形成了一條字符線,一個字符接著一個字符。在Java中,有字符串String、字符序列(CharSequence),雖然都是一根繩子,但它們不是一個東西——String是類、CharSequence是接口。ok,我們不討論Java的API。

這里要注重的是,

在使用連接運算時記住:

① 連接運算僅僅比元字符的優先級高。

boy是一個regex,其語義是b后面緊跟一個o再緊跟一個y。包括了元字符的時候,如b[ao]y其語義是b后面緊跟一個a或o再緊跟一個y。

② 所有的并集(除了baoy形式)僅僅匹配一個單字符,例如:

a(sdf)g匹配Iasdgbbasgbbafgbb,而a[sdf]g匹配asdgooasgoooafgooagooadg【并集還有很多東西要學習的。】

③ 關于.的問題。

有一個典型的例子——日期的匹配說明,我們應該謹慎使用它。日期格式一般是yyyy-mm-dd。當然也有yyyy.mm.dd等形式,假如使用/d/d/d/d./d/d/./d/d,雖然可以匹配用戶喜歡的日期分割符,但它也匹配2005a02b02,9876543210這不是我們希望的。也許使用[-/ .]頂替.比較好。它答應a dash, space, dot and forward slash作為日期分割符。【當然它也不完善,因為它匹配3005/13/50和0000/00/00。而它不匹配我寫的今天的日期格式05/2/2。事實上,regex的構造依靠于我們的目標——假如我們強制用戶使用yyyy/mm/dd格式,我們可以簡單的用:

(1920)/d/d/(0[1-9]1[012])/(0[1-9][12][0-9]3[01]) 。】

④ 連接的其他形式:

正如我們說知道的,a{3}是aaa的簡寫。a{1,3}是aaaaaa的簡寫。我們經常把它們與閉包運算放在一起討論。

§6 閉包
核心4點是r*表達式。我們首先回顧閉包運算的各種寫法,再深入理解正則表達式引擎的運行規則。

L (r*) = {ε,r,rr,……}是無窮集合,它匹配r串的任意有窮連結。

在Java中:

r?是{ε,r }的正則表達式;

r+是L (r*)-{ε}的正則表達式;

r{3,} 是L (r*)-{ε,r,rr}的正則表達式;

在涉及閉包運算時,我們會碰到幾個重要概念——Greediness(貪心)、lookahead和lookbehind(瞻前顧后——前瞻、后顧)等。我們先看幾個例子:

regex
String
替換⊙

a+
saaaasgaaafga
s⊙sg⊙fg⊙

ab?/w
abc aaabc gabbbf gbbaaag


a?
far【有四個匹配項】
⊙f⊙⊙r⊙

[ab]+
back about bar bbb aaa bac


[ab]+[rc]
back about bar bbb aaa bac


[ab]*
back about bar bbb aaa bac
⊙⊙c⊙k⊙ ⊙⊙o⊙u⊙t⊙ ⊙⊙r⊙ ⊙⊙ ⊙⊙ ⊙⊙c⊙

[0-9]+
123456654321999ok
⊙ok

[3-6]+
111333555888


([3-9])//1+
12355555551999ok


[ab]{3,}
abc aaabc gabbbf gbbaaag







解釋:單獨使用a?和a*很麻煩。

([3-6])//1+【regex練習器與Java源程序不同!】

§7 regex引擎的機制
regex引擎是處理正則表達式的軟件,嘗試以模板去匹配給定的字符串。一般而言,我們不直接調用該引擎,而是通過一些API去使用它們。對于不同的語言和開發環境,它們不會完全一致,其中Perl 5的regex是基礎,它也是使用得最廣泛的。Java語言的regex與Perl 5的regex flavor有一些不同。但機制是一致的。

1、匹配的兩種道路:

有兩種regex引擎:文本引導(text-directed)引擎和regex引導的引擎。它們

2、regex引擎是急性子,它總是返回最左邊的匹配項

必須記住的非常重要的一點:regex引導的引擎總是返回最左邊的匹配項。我在前面很小心的說某個regex可以匹配那些咚咚,是因為我們使用了一些Java語言的方法,regex引擎總是從字符串頭開始匹配(start from beginning),一旦找到了一個匹配項,它就會急急忙忙的報告說:“我找到了匹配項”。除非你要求它again。

對于文本good and god,regex為go{1,2}d,則返回最左邊的good。我們具體說明其過程。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 韶关市| 周至县| 庆阳市| 会泽县| 德庆县| 潍坊市| 普陀区| 华容县| 满洲里市| 清涧县| 武清区| 峡江县| 桐梓县| 呈贡县| 阳山县| 信丰县| 驻马店市| 苗栗市| 六枝特区| 河南省| 林口县| 平顺县| 洪洞县| 龙游县| 从化市| 镶黄旗| 和林格尔县| 门源| 民县| 济南市| 莆田市| 福清市| 铁岭市| 友谊县| 垦利县| 吴忠市| 辽源市| 罗江县| 芮城县| 微博| 龙江县|