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

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 581
#1

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

13.06.2014, 23:51. Просмотров 1322. Ответов 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 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2014, 23:51     Регулярные выражения c примером использования
Посмотрите здесь:

регулярные выражения PHP
С++ и регулярные выражения C++
Objective-C Вычисление выражения в строке
C# Регулярные выражения
JavaScript регулярные выражения
Софт Регулярные выражения: вставка символов в середину найденного выражения
Регулярные выражения C#
C# Регулярные выражения
PHP ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Регулярные выражения Oracle
Регулярные выражения C++ WinAPI
Регулярные выражения C#

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 19:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru