Форум программистов, компьютерный форум, киберфорум
Наши страницы

Objective-C

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

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

13.06.2014, 23:51. Просмотров 1478. Ответов 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;
    }
}
0
Вложения
Тип файла: zip test regular expression.zip (44.5 Кб, 19 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2014, 23:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Регулярные выражения c примером использования (Objective-C):

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ? - PHP
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Регулярные выражения - вывод сообщения об ошибке при нахождении в строке выражения, начинающегося с цифры - C#
Нужно чтобы при нахождении в строке выражения начинающегося с цифры появлялось сообщение об ошибке,например если ввести :2a,то будет...

Регулярные выражения: вставка символов в середину найденного выражения - Софт
Есть строки типа этого: &quot;В году 1783 марта месяца произошло событие, которые на долго запомнилось&quot;78. регулярное выражение для...

Регулярные выражения - PHP
Составить регулярное выражение, является ли заданная строчка IP адресом, записанным в десятичном виде. Ребят, помогите, вообще регулярки...

Регулярные выражения - Java SE
Задача найти в строке подстроку которая обрамлена &quot; (кавычками) перед которыми нет \ (обратных слешей). Внутри подстроки может быть 0 или...

Регулярные выражения - Python
Читал статью на хабре про регулярные выражение и не могу понять одну вещь, обьясните на пальцах. Цитирую: &quot;Скажем, вы хотите написать...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2014, 23:51
Привет! Вот еще темы с ответами:

Регулярные выражения - PHP
Дана строка, состоящая из слов, разделённых символами, которые перечислены во второй строке. Обе строки вводятся с использованием элементов...

Регулярные выражения - SQL Server
Здравствуйте! Прошу прощения, если обращаюсь не по адресу. У меня есть строчка кода, понятия не имею, на каком она языке, но полагаю, что...

Регулярные выражения - Java SE
Java гуру помогите ламеру. Есть строка String str= &quot;author=aaa name=bbb&quot;; нужно проверить синтаксис (в команде должно присутствовать...

Регулярные выражения - C#
Доброго времени суток. Вообщем задание такое, с помощью регулярных выражений определить правильность объявления массива(как одномерного так...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru