詳解iPhone應用中正則表達式OgreKit使用方法
iPhone應用中正則表達式OgreKit使用方法是本文要介紹的內(nèi)容,主要是來了解OgreKit使用方法,正則表達式是我非常常用的編程工具, 以前不管是在Ruby還是C#中使用率都非常高. 現(xiàn)在開始學習Cocoa之后就一直想知道如何使用正則表達式, 在Cocoa自帶的庫里面找了很久居然發(fā)現(xiàn)沒有相應的支持庫(BS一下, 這種常用的東西居然沒有, 也不知道蘋果是怎么想的….).
上網(wǎng)找了不少各式各樣的庫, 用下來要么體積太大, 要么結(jié)構(gòu)設計的不舒服, 最后把目標鎖定在了 OgreKit 上。
是的, 這是一個日本程序員寫的東西(無差別仇日的人可以走開了), 最讓我頭疼的一點就是沒有英文文檔…. 就連代碼里面的注釋都是日文的, 還好方法命名非常合理, 靠猜基本都能猜對.
下面介紹一下主要的類:
- OGRegularExpression (正則表達式功能實現(xiàn))
- OGRegularExpressionEnumerator (匹配結(jié)果集的枚舉器)
- OGRegularExpressionMatch (匹配結(jié)果)
- OGReplaceExpression (替換功能實現(xiàn))
- OGRegularExpressionFormatter (正則表達式格式化)
先介紹一下 OGRegularExpression.
通過查看它的源文件可以看到參數(shù)最多的一個靜態(tài)構(gòu)造函數(shù)的簽名如下
- + (id)regularExpressionWithString:(NSString*)expressionString
- options:(unsigned)options
- syntax:(OgreSyntax)syntax
- escapeCharacter:(NSString*)character;
參數(shù) options 可以接受以下值的組合:
- OgreNoneOption 沒有選項
- OgreSingleLineOption 只匹配單行
- OgreMultilineOption ‘.’ 將匹配折行
- OgreIgnoreCaseOption 忽略大小寫
- OgreExtendOption 使用擴展匹配模式
- OgreFindLongestOption 使用最大匹配模式
- OgreFindNotEmptyOption 忽略空匹配
- OgreNegateSingleLineOption
- OgreDontCaptureGroupOption 只匹配有名稱的組
- OgreCaptureGroupOption 匹配有名稱或者無名稱的組
- 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
可以看出, 這個庫基本上已經(jīng)封裝了所有正則表達式的功能, 而且還兼容多種語法, 很強!
由于很多第三方的庫都沒有什么文檔(Mac下面很少有文檔齊全的第三方庫), 所以自己查看源文件來了解用法基本上已經(jīng)是必要的技能了.
下面就來看看如何使用這套庫.
1、最簡單的使用范例.
- // 構(gòu)造正則表達式
- 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應用中正則表達式OgreKit使用方法的內(nèi)容介紹完了,希望通過本文的學習能對你有所幫助!