詳解iPhone應(yīng)用中正則表達(dá)式OgreKit使用方法
iPhone應(yīng)用中正則表達(dá)式OgreKit使用方法是本文要介紹的內(nèi)容,主要是來(lái)了解OgreKit使用方法,正則表達(dá)式是我非常常用的編程工具, 以前不管是在Ruby還是C#中使用率都非常高. 現(xiàn)在開(kāi)始學(xué)習(xí)Cocoa之后就一直想知道如何使用正則表達(dá)式, 在Cocoa自帶的庫(kù)里面找了很久居然發(fā)現(xiàn)沒(méi)有相應(yīng)的支持庫(kù)(BS一下, 這種常用的東西居然沒(méi)有, 也不知道蘋(píng)果是怎么想的….).
上網(wǎng)找了不少各式各樣的庫(kù), 用下來(lái)要么體積太大, 要么結(jié)構(gòu)設(shè)計(jì)的不舒服, 最后把目標(biāo)鎖定在了 OgreKit 上。
是的, 這是一個(gè)日本程序員寫(xiě)的東西(無(wú)差別仇日的人可以走開(kāi)了), 最讓我頭疼的一點(diǎn)就是沒(méi)有英文文檔…. 就連代碼里面的注釋都是日文的, 還好方法命名非常合理, 靠猜基本都能猜對(duì).
下面介紹一下主要的類:
- OGRegularExpression (正則表達(dá)式功能實(shí)現(xiàn))
- OGRegularExpressionEnumerator (匹配結(jié)果集的枚舉器)
- OGRegularExpressionMatch (匹配結(jié)果)
- OGReplaceExpression (替換功能實(shí)現(xiàn))
- OGRegularExpressionFormatter (正則表達(dá)式格式化)
先介紹一下 OGRegularExpression.
通過(guò)查看它的源文件可以看到參數(shù)最多的一個(gè)靜態(tài)構(gòu)造函數(shù)的簽名如下
- + (id)regularExpressionWithString:(NSString*)expressionString
- options:(unsigned)options
- syntax:(OgreSyntax)syntax
- escapeCharacter:(NSString*)character;
參數(shù) options 可以接受以下值的組合:
- OgreNoneOption 沒(méi)有選項(xiàng)
- OgreSingleLineOption 只匹配單行
- OgreMultilineOption ‘.’ 將匹配折行
- OgreIgnoreCaseOption 忽略大小寫(xiě)
- OgreExtendOption 使用擴(kuò)展匹配模式
- OgreFindLongestOption 使用最大匹配模式
- OgreFindNotEmptyOption 忽略空匹配
- OgreNegateSingleLineOption
- OgreDontCaptureGroupOption 只匹配有名稱的組
- OgreCaptureGroupOption 匹配有名稱或者無(wú)名稱的組
- OgreDelimitByWhitespaceOption
參數(shù) syntax 可以接受以下值的組合:
- OgrePOSIXBasicSyntax POSIX Basic RE
- OgrePOSIXExtendedSyntax POSIX Extended RE
- OgreEmacsSyntax Emacs
- OgreGrepSyntax grep
- OgreGNURegexSyntax GNU regex
- OgreJavaSyntax Java (Sun java.util.regex)
- OgrePerlSyntax Perl
- OgreRubySyntax Ruby (default)
- OgreSimpleMatchingSyntax Simple Matching
- escapeCharacter:
- OgreBackslashCharacter @”\\” Backslash (default)
- OgreGUIYenCharacter [NSString stringWithUTF8String:"\xc2\xa5"] Yen Mark
可以看出, 這個(gè)庫(kù)基本上已經(jīng)封裝了所有正則表達(dá)式的功能, 而且還兼容多種語(yǔ)法, 很強(qiáng)!
由于很多第三方的庫(kù)都沒(méi)有什么文檔(Mac下面很少有文檔齊全的第三方庫(kù)), 所以自己查看源文件來(lái)了解用法基本上已經(jīng)是必要的技能了.
下面就來(lái)看看如何使用這套庫(kù).
1、最簡(jiǎn)單的使用范例.
- // 構(gòu)造正則表達(dá)式
- OGRegularExpression *regex = [OGRegularExpression regularExpressionWithString:@"a[^a]*a"];
- // 構(gòu)造匹配結(jié)果枚舉器
- NSEnumerator *enumerator = [regex matchEnumeratorInString:@"alphabetagammadelta"];
- OGRegularExpressionMatch *match; // 定義匹配結(jié)果
- while ((match = [enumerator nextObject]) != nil) { // 順序獲得匹配結(jié)果字符串
- NSLog(@"%@", [match matchedString]);
- }
- // 匹配結(jié)果:
- // alpha
- // aga
- // adelta
2、替換功能使用范例.
- - (void)replaceTest
- {
- OGRegularExpression *celciusRegex;
- celciusRegex = [OGRegularExpression regularExpressionWithString:@"([+-]?\\d+(?:\\.\\d+)?)C\\b"];
- NSString *targetString = @"36.5C, 3.8C, -195.8C";
- NSLog(@"%@", [celciusRegex replaceAllMatchesInString:targetString
- delegate:self
- replaceSelector:@selector(fahrenheitFromCelsius:contextInfo:)
- contextInfo:nil]);
- // 處理結(jié)果: 97.7F, 38.8F, -320.4F
- }
- // 攝氏度轉(zhuǎn)換到華氏溫度.
- - (NSString*)fahrenheitFromCelsius:(OGRegularExpressionMatch*)aMatch contextInfo:(id)contextInfo
- {
- double celcius = [[aMatch substringAtIndex:1] doubleValue];
- double fahrenheit = celcius * 9.0 / 5.0 + 32.0;
- return [NSString stringWithFormat:@"%.1fF", fahrenheit]; // 返回替換結(jié)果.
- }
3、帶名稱匹配組使用范例.
- OGRegularExpression *regex = [OGRegularExpression regularExpressionWithString:@"<img src=\"(?<imageURL>.+)\".+>"
- options:OgreCaptureGroupOption
- syntax:OgreRubySyntax
- escapeCharacter:OgreBackslashCharacter];
- NSArray *matches = [regex allMatchesInString:@"<img src=\"http://test.com/hello.jpg\">"];
- if (matches != nil && ([matches count] == 1))
- {
- OGRegularExpressionMatch *match = [matches objectAtIndex: 0];
- NSString *result = [match substringNamed:@"ImageURL"];
- // 結(jié)果: ttp://test.com/hello.jpg
- }
小結(jié):詳解iPhone應(yīng)用中正則表達(dá)式OgreKit使用方法的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!