Форум программистов, компьютерный форум CyberForum.ru

упрощенный RegexKitLite - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Определение района города http://www.cyberforum.ru/objective-c/thread847332.html
Приветос всем, я вот определил точный адрес в городе и тп с помощью CLGeocoder, кто шарит, как определить название района города? (например центральный и т.п.) в гугл мап на сайте определяет район спб, как его оттуда вытащить?? в апи там про район города ничего не написано
Objective-C Учебник Посоветуйте какую-нибудь книгу (или сайт, ну вообщем инф.) по работе с базой данных SQL? http://www.cyberforum.ru/objective-c/thread844779.html
Положение кнопки Objective-C
В зависимости от положения кнопки у меня должны выполняться различные функции от нажания кнопки. Т.е. если кнопка в одном положении, то выполнится одно действие, если в другом, то другое. Я подумал создать CGRect и сравнивать координаты кнопки с ним, но не получилось: CGRect newRect = CGRectMake(0, 100, 768, 100); if (self.Button2.frame==newRect) //Действие Однако такое...
Иерархия StoryBoard Objective-C
Вопрос простой. В родовой View я создаю еще какой-нибудь контейнер, пусть будет Scroll View. Далее я хочу создать какую-нибудь кнопку, которая будет находиться как бы НАД scroll view, но терротириально в нем. Т.е. мне нужна кнопка, которая будет терротириально нахдиться в scroll view, но принадлежать родовому view. Когда я создаю такую кнопку, то как бы я ее не двигал, если она...
Objective-C Visible http://www.cyberforum.ru/objective-c/thread844372.html
Я новичок, по этому прошу относиться с пониманием. Нужно сделать так, что бы контейнер по нажатии кнопки был активным илм не активным. (в других ЯП определяется пременной visible, по нужна не прозрачность, а именно активность). Понимаю, что плохо описал) По нажатии кнопки контейнер должен либо появляться либо пропадать. Полазив по мануалу понял, что это определяется с помощью isVisible. Т.е....
Objective-C классы, экземпляры, протоколы, и.т.п Здравствуйте, хочу поподробней почитать про классы, экземпляры, протоколы, и.т.п , где есть доступная информация на понятном языке ? ссылку плз ) подробнее

Показать сообщение отдельно
alexpac26
 Аватар для alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
25.04.2013, 16:46     упрощенный RegexKitLite
phpRegexKitLite.h
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// PHPregexKitLite
 
#import <Foundation/Foundation.h>
#import "RegexKitLite.h"
 
 
#ifndef phpRegexKitLite_class
#define phpRegexKitLite_class
 
static RKLRegexOptions preg_options_extract(NSMutableString* pattern);
static NSString * preg_match(NSString * pattern, NSString* subject);
static NSArray * preg_match_all(NSString * pattern, NSString* subject);
static NSArray * preg_explode(NSString * pattern, NSString* subject);
static NSArray * preg_split(NSString * pattern, NSString* subject);
static NSString * preg_replace(NSString* pattern ,NSString* replacement ,NSString* subject);
 
/*
 подключение к RegexKitLite
 
 libicucore.dylib (framework)
 -fno-objc-arc (флаг компиляции без ARC)
 
 */
 
/*
 i - чувствительность к регистру
 s - символ . означает также переносы строк
 m - многострочные выражения
 u - юникод
 c - комментарии в выражениях
 
 
 синтаксис выражений  почти полностью идентичен синтаксису php выражений
 
 примеры
 
 NSString *s = @"Hello world";
 
 bool ok = preg_match(@"#hello w#",s);
 
 ok == false
 
 bool ok = preg_match(@"#hello w#i",s); // флаг чувствительность к регистру
 
 ok == true
 
 выражение должны быть заключено между скобками  # или любым другим символом
 фгаги обработки выражения пишутся после
 
 
 RKLNoOptions             = 0,
 RKLCaseless              = 2,
 RKLComments              = 4,
 RKLDotAll                = 32,
 RKLMultiline             = 8,
 RKLUnicodeWordBoundaries = 256
 */
 
static RKLRegexOptions preg_options_extract(NSMutableString* pattern) {
    NSString *s1 = [pattern substringToIndex:1];
    for (int z=pattern.length-1; z>=1; z--) {
        if ([[pattern substringWithRange:NSMakeRange(z, 1)] isEqualToString:s1]) {
            // обнаружено
            // разбор флагов
            RKLRegexOptions ret = RKLNoOptions;
            NSString *flags = [pattern substringWithRange:NSMakeRange(z+1, pattern.length-z-1)];
            for (int i=0; i<flags.length; i++) {
                NSString *f = [flags substringWithRange:NSMakeRange(i, 1)];
                if ([f isEqualToString:@"i"]) {
                    ret = (ret | RKLCaseless);
                    continue;
                }
                if ([f isEqualToString:@"s"]) {
                    ret = (ret | RKLDotAll);
                    continue;
                }
                if ([f isEqualToString:@"m"]) {
                    ret = (ret | RKLMultiline);
                    continue;
                }
                if ([f isEqualToString:@"u"]) {
                    ret = (ret | RKLUnicodeWordBoundaries);
                    continue;
                }
                if ([f isEqualToString:@"c"]) {
                    ret = (ret | RKLComments);
                    continue;
                }
            }
            // сохраняем выражение
            
            [pattern setString:[pattern substringWithRange:NSMakeRange(1, z-1)]];
            NSLog(@"parrent is %@", pattern);
            return ret;
        }
    }
    NSLog(@"RegExPreg::preg_options_extract : invalid pattern detected %@",pattern);
    return RKLNoOptions;
}
 
 
static NSString * preg_match(NSString * pattern, NSString* subject) {
    NSMutableString *sp = [NSMutableString stringWithString:pattern];
    RKLRegexOptions opt = preg_options_extract(sp);
    return  [subject stringByMatching:sp options:opt inRange:NSMakeRange(0, subject.length) capture:0 error:NULL];
}
 
static NSArray * preg_match_all(NSString * pattern, NSString* subject) {
    NSMutableString *sp = [NSMutableString stringWithString:pattern];
    RKLRegexOptions opt = preg_options_extract(sp);
    return  [subject arrayOfCaptureComponentsMatchedByRegex:sp options:opt range:NSMakeRange(0, subject.length) error:NULL];
}
 
static NSArray * preg_explode(NSString * pattern, NSString* subject) {
    NSMutableString *sp = [NSMutableString stringWithString:pattern];
    RKLRegexOptions opt = preg_options_extract(sp);
    return  [subject componentsSeparatedByRegex:sp options:opt range:NSMakeRange(0, subject.length) error:NULL];
}
 
static NSArray * preg_split(NSString * pattern, NSString* subject) {
    return preg_explode(pattern,subject);
}
 
static NSString * preg_replace(NSString* pattern ,NSString* replacement ,NSString* subject) {
    NSMutableString *sp = [NSMutableString stringWithString:pattern];
    RKLRegexOptions opt = preg_options_extract(sp);
    return [subject stringByReplacingOccurrencesOfRegex:sp withString:replacement options:opt range:NSMakeRange(0, subject.length) error:NULL];
}
 
#endif
список фукнций для работы


Objective-C
1
NSString * preg_match(NSString * pattern, NSString* subject);
// проверяет соотвествие выражения строке
если nil то не соотвествует

Objective-C
1
NSArray * preg_match_all(NSString * pattern, NSString* subject);
помещает в многомерный массив все совпадения выражения pattern в строке subject

Objective-C
1
2
NSArray * preg_explode(NSString * pattern, NSString* subject); 
NSArray * preg_split(NSString * pattern, NSString* subject);
возвращает массив из строки subject разделенный выражением pattern

Objective-C
1
NSString * preg_replace(NSString* pattern ,NSString* replacement ,NSString* subject);
возвращает строку в которой все совпадения pattern заменены на replacement

работа функций похожа на работу php функций что упрощает работу с функциями регулярных выражений

пример работы

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
- (IBAction)b1:(id)sender {
 
    // показать текущий текст
    
    NSLog(@"текущий текст \n%@",_text);
 
}
 
- (IBAction)b2:(id)sender {
    // preg_match_all
    
    NSArray *matches = preg_match_all(@"#co(\\w{2})(\\w+)#i", _text);
     NSLog(@"preg_match_all совпадения \n%@",matches);
    
}
 
- (IBAction)b3:(id)sender {
    // preg_replace
    NSString* s = preg_replace(@"#(\\w)\\w+#", @"$1zzz", _text);
    NSLog(@"preg_replace текст \n%@",s);
    
}
 
- (IBAction)b4:(id)sender {
    NSArray *matches = preg_split(@"#flag#i", _text);
     NSLog(@"preg_split массив \n%@",matches);
}
для выражений используется следующий синтаксис

#выражение#флаги

если всеже надо использовать сивол # то допускается любой другой в качестве скобок

@выражение@флаги

общий систаксис соотвествует RegExKitLite который в свою очередь почти соотвествует php регулярным выражениям

список флагов

i - чувствительность к регистру
s - символ . означает также переносы строк
m - многострочные выражения
u - юникод
c - комментарии в выражениях

пример выражения

NSString *s = @"Hello world";

preg_match(@"#hello w#",s); // вернет НЕТ

preg_match(@"#hello w#i",s); // вернет ДА

тестовый проект во вложении
Вложения
Тип файла: zip test_regex.zip (129.5 Кб, 6 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru