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

Регулярные выражения c примером использования - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Подсчет слов в строке типа NSString http://www.cyberforum.ru/objective-c/thread1207331.html
Доброго времени суток.. Я начинающий программист на objective C, поэтому прошу помощи в решение следующей проблемы: Есть переменная S типа NSString, в нее получен текст, каким образом можно подсчитать количество слов в этом тексте.. Очень благодарен всем за любую помощь...
Objective-C Запуск приложения при трехкратном нажатии кнопки Home Добрый день! Есть ли возможность запустить приложение (на iPhone) при трехкратном нажатии кнопки Home? Ну или как нибудь, например при вводе спец последовательности символов? http://www.cyberforum.ru/objective-c/thread1204704.html
Objective-C Создание Push notification сервера и реализация работы
Народ кто может описать подробно и по русски как правильно подойти к вопросу push. Если лепить свой сервер то как, и если пользоваться сторонними службами типа PushBoot (который нормально не работает) то что лучше взять как альтернативу
MapKit не отображает локацию Objective-C
Всем привет! - (void)viewWillAppear:(BOOL)animated { ; // Координаты точки на карте CLLocationCoordinate2D location; location.latitude = 55.5699620; location.longitude = 38.1325020;
Objective-C Пробелы в коде в Xcode http://www.cyberforum.ru/objective-c/thread1202102.html
Вопрос скорее по оформлению редактора.. Можно ли в Xcode включить такую фичу, когда автоматически ставятся пробелы с двух сторон от равно? К примеру, a=b; автоматически исправится в a = b; Просто в visual studio такое было..
Objective-C Как ограничить число вводимых символов Как ограничить число вводимых символов в Text Field& подробнее

Показать сообщение отдельно
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583

Регулярные выражения c примером использования - Objective-C

13.06.2014, 23:51. Просмотров 1376. Ответов 0
Метки (Все метки)

Перезагружаю тему использования php совместимых регулярных выражений.

Использование регулярных выражений

так как:

1) в том коде содержались ошибки, и не корректно обрабатывались результаты подвыражений.
2) тема скатилась в предикаты. Вообщем стала неактуальной.

ИТАК

пример IPAD программы для тестирования сабжа

Регулярные выражения c примером использования

Хедер файла
PHP_RegularExpression.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
/*
 PHP_RegularExpression.h
 
 PHP Совместимые Регулярные выражения
 
 [url]http://www.php.net/manual/en/ref.pcre.php[/url]
 
 */
 
#import <Foundation/Foundation.h>
 
#pragma mark Регулярные выражения
 
/*
 NSRegularExpressionCaseInsensitive             i
 NSRegularExpressionAllowCommentsAndWhitespace  c
 NSRegularExpressionIgnoreMetacharacters        m
 NSRegularExpressionDotMatchesLineSeparators    s
 NSRegularExpressionAnchorsMatchLines           l
 NSRegularExpressionUseUnixLineSeparators       x
 NSRegularExpressionUseUnicodeWordBoundaries    u
 
 описание флагов смотрите в APPLE документации, часть флагов совместима с PHP флагами
 
 в качестве разделителя всегда используется символ #
 
 Синтаксис регулярных выражений совместим с PHP синтаксисом
 
 Пример:
 
 NSString * text = @"hello world Tree lemon";
 
NSRange result = php_preg_match_range ('#tree#i', text ); // в качестве разделителя используется решетка, в качестве флага символ i
 
 if (result.location != NSNotFound) {
    NSLog(@"найденный текст %d %@", result.location, [text substringWithRange: result.location]);
 }
 
 
 // [url]http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40009708-CH1-SW48[/url]
 */
 
#ifndef _php_RegularExpression
#define _php_RegularExpression
 
NSRange php_preg_match_range (NSString * pattern, NSString* subject);
 
NSString * php_preg_match (NSString * pattern, NSString* subject);
 
NSMutableArray* php_preg_match_range_all (NSString * pattern, NSString* subject);
 
NSString * php_preg_replace(NSString* pattern ,NSString* replacement ,NSString* subject);
 
NSMutableArray * php_preg_match_all (NSString * pattern, NSString* subject);
 
NSArray * php_preg_split(NSString * pattern , NSString* subject);
 
#endif
Кликните здесь для просмотра всего текста

PHP_RegularExpression.m
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
 PHP_RegularExpression.h
 
 PHP Совместимые Регулярные выражения
 
 [url]http://www.php.net/manual/en/ref.pcre.php[/url]
 
 */
 
#import "PHP_RegularExpression.h"
 
#pragma mark System
 
NSRegularExpressionOptions php_preg_option_extract(NSMutableString* pattern) {
    
    // поиск флагов
    
    NSMutableArray * pattern_elements = [[pattern componentsSeparatedByString:@"#"] mutableCopy];
    
    if (pattern_elements.count >= 3) {
        
        if ([pattern_elements[0] length] == 0) {
            NSString * flags = [pattern_elements lastObject];
            
            NSRange range;
            NSRegularExpressionOptions ret = 0;
            
            range = [flags rangeOfString:@"i"];
            if (range.location != NSNotFound)
                ret = (ret | NSRegularExpressionCaseInsensitive);
            
            range = [flags rangeOfString:@"s"];
            if (range.location != NSNotFound)
                ret = (ret | NSRegularExpressionDotMatchesLineSeparators);
            
            range = [flags rangeOfString:@"l"];
            if (range.location != NSNotFound)
                ret = (ret | NSRegularExpressionAnchorsMatchLines);
            
            range = [flags rangeOfString:@"u"];
            if (range.location != NSNotFound)
                ret = (ret | NSRegularExpressionUseUnicodeWordBoundaries);
            
            range = [flags rangeOfString:@"x"];
            if (range.location != NSNotFound)
                ret = (ret | NSRegularExpressionUseUnixLineSeparators);
            
            range = [flags rangeOfString:@"c"];
            if (range.location != NSNotFound)
                ret = (ret | NSRegularExpressionAllowCommentsAndWhitespace);
            
            range = [flags rangeOfString:@"m"];
            if (range.location != NSNotFound)
                ret = (ret | NSRegularExpressionIgnoreMetacharacters);
            
        }
        
        [pattern_elements removeObjectAtIndex:0];
        [pattern_elements removeLastObject];
        
        // сохраняем выражение
        [pattern setString: [pattern_elements componentsJoinedByString:@"#"]];
        
    }
    
    return 0;
}
 
NSMutableArray *sys_php_preg_match_range_all (NSString * pattern, NSString* subject, bool stringMode) {
    if ([pattern length] ==0) { return nil; }
    if ([subject length] ==0) { return nil; }
    
    NSMutableString *pattern_ok = [NSMutableString stringWithString:pattern];
    NSRegularExpressionOptions opt = php_preg_option_extract(pattern_ok);
    
    NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:pattern_ok options:opt error:NULL];
    NSArray *res = [reg matchesInString:subject options:NSMatchingReportProgress range:NSMakeRange(0, subject.length)];
    
    if ([res count] == 0) {
        return [NSMutableArray new];
    }
    
    NSMutableArray * result = [NSMutableArray new];
    
    if (stringMode) {
        // STRING MODE
        for (NSTextCheckingResult* obj in res) {
            NSMutableArray *obj_result = [NSMutableArray new];
            for (NSInteger i = 0; i<[obj numberOfRanges]; i++) {
                [obj_result addObject: [subject substringWithRange:[obj rangeAtIndex:i]]];
            }
            [result addObject:obj_result];
        }
    } else {
        // RANGE MODE
        for (NSTextCheckingResult* obj in res) {
            NSMutableArray *obj_result = [NSMutableArray new];
            for (NSInteger i = 0; i<[obj numberOfRanges]; i++) {
                [obj_result addObject: [NSValue valueWithRange: [obj rangeAtIndex:i]]];
            }
            [result addObject:obj_result];
        }
    }
    
    return result;
}
 
#pragma mark Регулярные выражения
 
NSRange php_preg_match_range (NSString * pattern, NSString* subject) {
    if ([pattern length] ==0) { return NSMakeRange(NSNotFound, 0); }
    if ([subject length] ==0) { return NSMakeRange(NSNotFound, 0);; }
    
    NSMutableString *pattern_ok = [NSMutableString stringWithString:pattern];
    NSRegularExpressionOptions opt = php_preg_option_extract(pattern_ok);
    
    NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:pattern_ok options:opt error:NULL];
    NSTextCheckingResult *res = [reg firstMatchInString:subject options:NSMatchingReportProgress range:NSMakeRange(0, subject.length)];
    
    return [res range];
}
 
NSString * php_preg_match (NSString * pattern, NSString* subject) {
    NSRange res = php_preg_match_range(pattern, subject);
    
    if (res.location == NSNotFound) return nil;
    
    return [subject substringWithRange:res];
}
 
NSMutableArray *php_preg_match_range_all (NSString * pattern, NSString* subject) {
    return sys_php_preg_match_range_all(pattern, subject, false);
}
 
NSMutableArray * php_preg_match_all (NSString * pattern, NSString* subject) {
    return sys_php_preg_match_range_all(pattern, subject, true);
}
 
NSString * php_preg_replace(NSString* pattern ,NSString* replacement ,NSString* subject) {
    if ([pattern length] ==0) { return nil; }
    if ([subject length] ==0) { return nil; }
    
    NSMutableString *pattern_ok = [NSMutableString stringWithString:pattern];
    NSRegularExpressionOptions opt = php_preg_option_extract(pattern_ok);
    
    NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:pattern_ok options:opt error:NULL];
    
    return [reg stringByReplacingMatchesInString:subject options:NSMatchingReportProgress range:NSMakeRange(0, subject.length) withTemplate:replacement];
}
 
NSArray * php_preg_split(NSString * pattern , NSString* subject) {
    
    NSString * pre_result = php_preg_replace(pattern, @"%%%R%%%", subject);
    
    if (pre_result) {
        return [pre_result componentsSeparatedByString:@"%%%R%%%"];
    } else {
        return nil;
    }
}
Вложения
Тип файла: zip test regular expression.zip (44.5 Кб, 19 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru