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

Objective-C

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

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

03.05.2014, 19:01. Просмотров 1438. Ответов 11
Метки нет (Все метки)

Перемещено из Поиск в массиве

noname_club, а зачем вот это:
топик-стартер наверно имел ввиду поиск строки в текстовом файле.

как один из вариантов это поиск через регулярки.

синтаксис индентичен php выражениям
думаю вы не будет оспаривать тот факт что php синтаксис выражений , в частности перечисление флагов i,s,m в самом выражении, более читабелен нежели objc конструкции.

Добавлено через 3 минуты
[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
lines = [fileString componentsSeparatedByString:@"\n"];
это уже трансформация текста в массив.

вот мой массив,мне надо просто проверить на наличие в нем какого-то слова
Objective-C
1
2
3
4
5
6
7
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"word_base"
                                                         ofType:@"txt"];
NSString *fileString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
 
if (php_preg_match(@"слово", fileString )) {
   // слово найдено!
}
Добавлено через 10 минут
еще можно через предикаты
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
// мануалы по предикатам
/*
 [url]http://macbug.ru/cocoa/predformat#.URySNejoRGM[/url]
 [url]http://userguide.icu-project.org/strings/regexp[/url]
 */
 
#define pr_BEGINSWITH_IgnoreCase @"BEGINSWITH[cd]"
#define pr_ENDSWITH_IgnoreCase @"ENDSWITH[cd]"
#define pr_LIKE_IgnoreCase @"LIKE[cd]"
#define pr_CONTAINS_IgnoreCase @"CONTAINS[cd]"
#define pr_MATCHES_IgnoreCase @"MATCHES[cd]"
#define pr_EQUAL_IgnoreCase @"==[cd]"
 
#define pr_BEGINSWITH @"BEGINSWITH"
#define pr_ENDSWITH @"ENDSWITH"
#define pr_LIKE @"LIKE"
#define pr_CONTAINS @"CONTAINS"
#define pr_MATCHES @"MATCHES"
#define pr_EQUAL @"=="
 
bool string_predicate_match (NSString* string, NSString* predicate, NSString* predicateValue) {
// функция сравнения строк через выражения
    NSString *p1 = [NSString stringWithFormat:@"SELF %@ %%@",predicate];
    NSPredicate *regexp = nil;
    if (predicateValue) {
        regexp = [NSPredicate predicateWithFormat:p1,predicateValue];
    }
    return [regexp evaluateWithObject:string];
}
пример

Objective-C
1
2
3
4
5
6
7
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"word_base"
                                                         ofType:@"txt"];
NSString *fileString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
 
if ( string_predicate_match(fileString , pr_CONTAINS, @"слово" )) {
   // слово найдено!
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2014, 19:01     Использование регулярных выражений
Посмотрите здесь:

1C 8.x Использование регулярных выражений - 1С
Доброе утро, подскажите пожалуйста, совсем запуталась. У меня есть модуль, нужно, чтобы внутри процедуры Заполнить выполнялись процедуры...

Использование регулярных выражений - C#
Добрый День! Имеется строка в виде <Symbol>GRX/SPB</Symbol> <ContractPosition>-100</ContractPosition> <USDValue>136240</USDValue> Как...

Использование регулярных выражений - PowerShell
Доброго времени суток, уважаемые форумчане! Подскажите пожалуйста. Уже мозг сломал. Есть массив $arrayA, содержащий множество...

Использование регулярных выражений в case - Bash
case "$Keypress" in ) echo "буква в нижнем регистре";; ) echo "Буква в верхнем регистре";; ) echo "Цифра";; * ...

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

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

Использование регулярных выражений для получения определенных строк - C#
ребят помогите пожалуйста, не могу сделать и все (((( есть файл, в этом файле нужно найти строки типа: 10.05.2012 16:17:38,977 ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
03.05.2014, 20:51     Использование регулярных выражений #2
Цитата Сообщение от noname_club Посмотреть сообщение
думаю вы не будет оспаривать тот факт что php синтаксис выражений , в частности перечисление флагов i,s,m в самом выражении, более читабелен нежели objc конструкции.
Ясное дело буду. Зачем мне php нотация в Objective-C коде... При этом еще и в виде функций, а не "хотя бы" категорий.
Или еще лучше:
#define pr_EQUAL @"=="
Вместо двух символов или пяти с ковычками и собакой использовать странные именования.

noname_club, знаете такой принцип бритвы Оккама?
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
04.05.2014, 12:43  [ТС]     Использование регулярных выражений #3
Вместо двух символов или пяти с ковычками и собакой использовать странные именования.
вы не берете в рассчет подсказки IDE xcode

стоит набрать pr_ и открывается список предикатов которые можно применить.
Таким образом не нужно запоминать названия этих предикатов и как они пишутся. Достаточно набрать pr_

Зачем мне php нотация в Objective-C коде... При этом еще и в виде функций, а не "хотя бы" категорий.
не буду комментировать. Мне просто нравиться СИ синтаксис функций, особенно в том случае если они выполняют нечто важное.

Добавлено через 23 минуты
рассмотрим бритву оккама на примере предиката

Objective-C
1
2
3
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"word_base"
                                                         ofType:@"txt"];
NSString *fileString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
1) бритва Оккама с использование только Foundation.h

---A---

Вcпомнить название и правописание предиката CONTAINS

---B---

Включить CAPSLOCK или держать Shift для правильного написания предиката

---C---

Составить предикат

Objective-C
1
[NSPredicate predicateWithFormat:@"SELF CONTAINS %@", @"слово"]
---D---

составить условие

Objective-C
1
2
3
if ([[NSPredicate predicateWithFormat:@"SELF CONTAINS %@", @"слово"] evaluateWithObject: fileString]) {
 // слово найдено!
}
ИТОГ

A+B+C+D = результат

~~~~~~~~~~~~~~~~~~~

2) бритва Оккама с использованием %библитеки утилит общего назначения в которой есть функция string_predicate_match()%.h

---A---

Вспомнить что есть название фунции состоящее из string (строковая) + predicate(предикат) + match(соответствие)

---B---

Вспомнить что при наборе pr_ получаем список предикатов доступных для использования

---С---

Составить условие
Objective-C
1
2
3
if ( string_predicate_match(fileString , pr_CONTAINS, @"слово" )) {
   // слово найдено!
}
ИТОГ

A+B+C = результат
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
04.05.2014, 19:27     Использование регулярных выражений #4
Цитата Сообщение от noname_club Посмотреть сообщение
не буду комментировать. Мне просто нравиться СИ синтаксис функций, особенно в том случае если они выполняют нечто важное.
Работал я с одним человеком, у которого на такие вещи были стандартные слова - "мне так нравится делать". Не любили его в команде, и удалили позже.
Так вот, если это вам нравится, но вы не думаете о тех людях, которые могут столкнуться с вашими творениями - это прискорбно.
Цитата Сообщение от noname_club Посмотреть сообщение
A+B+C = результат
Пропускаете то, что 99% из тех, кто программирует на Objective-C, и слышать не слышали о такой странности, как использовать наименования и обвязку функциональной частью "как в php" методов из Foundation Framework.
Еще пропускаете то, что придется запоминать совершенно ненужную прослойку в виде ваших "pr_ololo"
В итоге мы будем иметь одинаковый функционал, написанный несколько раз. И один раз будет в странном синтаксисе, который по стилю будет совершенно отличен от остального кода.

Имхо, вы как-то странно показали пример для выражения "не плодить сущности без необходимости"...
А ваша обвязка в данном контексте - именно такая сущность.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
04.05.2014, 20:16  [ТС]     Использование регулярных выражений #5
Не любили его в команде, и удалили позже.
В команде люди должны разговаривать друг с другом и чтобы использовать эти "библиотеки" нужно 2 вещи:

1) документация на "библиотеки", которая показывает сущность идеологии их использования.
2) желание их использовать

как использовать наименования и обвязку функциональной частью "как в php" методов из Foundation Framework.
тот кто программирует на OBJ-C должен был с чегото начинать. Это мог быть php это мог быть JavaScript, должен по крайней мере интересоваться.

Сам факт использования регулярных выражений это уже гарантия частичного знания JavaScript или PHP или Perl

так как научиться использовать регулярки можно только в скриптовых языках.

Научиться использовать регулярки только в Objc сложнее, так как язык громоздкий и психологически не дает той прозрачности кода которая присуща скриптовым языкам.

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

Имхо, вы как-то странно показали пример для выражения "не плодить сущности без необходимости"...
А ваша обвязка в данном контексте - именно такая сущность.
Когда сущность вызывается многократно. Возникает дублирование кода не?

Добавлено через 6 минут
Пропускаете то, что 99% из тех, кто программирует на Objective-C, и слышать не слышали о такой странности, как использовать наименования и обвязку функциональной частью "как в php" методов из Foundation Framework.
Еще пропускаете то, что придется запоминать совершенно ненужную прослойку в виде ваших "pr_ololo"
2)
в пунктах A и B как раз идет обращение мозга к тому что нужно вспомнить

1)
в пункте A тоже идет обращеник тому что нужно вспомнить

вопрос в том насколько быстро будет выполнет A1 по сравнению с A2 и B2

а что говорить про пункты C1 и D1 они в 2-3 раза медленее и напряжнее чем C2
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16688 / 6614 / 431
Регистрация: 12.06.2012
Сообщений: 19,873
Завершенные тесты: 1
04.05.2014, 20:19     Использование регулярных выражений #6
А мне нравится писать весь код в одну строчку..
Цитата Сообщение от noname_club Посмотреть сообщение
если нравится надо обосновать свою точку зрения
Вы совершенно правы! Это же сколько экономии, не надо затем никаких обфускаторов и т.п., сжимающих код! Правда, C не особо-то это позволяет, поэтому я использую другие языки программирования. Но это же не беда?
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
04.05.2014, 20:25  [ТС]     Использование регулярных выражений #7
просмотрим на это с другой стороны

Допустим есть задача:

Автоматизировать в среде разработки ввод предиката, да так чтобы она тебе подсказывала какой предикат можно применить, чтобы его самому не писать?

Так бы ты zulkis ее решил?

Добавлено через 2 минуты
Вы совершенно правы! Это же сколько экономии, не надо затем никаких обфускаторов и т.п., сжимающих код! Правда, C не особо-то это позволяет, поэтому я использую другие языки программирования. Но это же не беда?
Сарказм?
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16688 / 6614 / 431
Регистрация: 12.06.2012
Сообщений: 19,873
Завершенные тесты: 1
04.05.2014, 20:31     Использование регулярных выражений #8

Не по теме:

Цитата Сообщение от noname_club Посмотреть сообщение
Сарказм?
Не.. Скука)



Добавлено через 4 минуты
Цитата Сообщение от noname_club Посмотреть сообщение
так как научиться использовать регулярки можно только в скриптовых языках
не согласен. В большинстве ЯП используется один и тот же синтаксис - PCRE (Perl-совместимые регулярные выражения), а различия его синтаксиса в различных ЯП заключаются лишь в реализованных возможностях (да, встречаются еще и POSIX-совместимые регулярки, но это уже почти редкость). Например, в упомянутом выше JavaScript отсутствуют заглядывания назад, возможность проверки на начало/конец строки и т.п., а в PHP, Ruby и т.п. это реализовано. Ну и, возможно, небольшие отличия по синтаксису (хотя сама суть одна и та же - лишь незначительные различия в реализации).
На основании вышеизложенного можно смело сказать, что знание/незнание регулярных выражений не зависит от знания/незнания каких-либо скриптовых ЯП. Да и, к примеру, если почитаете книгу Фридла, то увидите, что он вообще начинает объяснять регулярки на примере "своего" языка..
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
06.05.2014, 06:57     Использование регулярных выражений #9
Давно стараюсь игнорировать посты noname_club, но тут все-таки выскажу свое мнение.

У такого подхода плюсы я вижу такой: IDE подсказывает строчку. Все.

Минусы:
Главный минус: такая либа не нужна. Задача, которую вы пытаетесь решить, noname_club, такая мелкая и настолько частная, что использование чего-то стороннего здесь - это просто большой оверхед (опять же бритва Оккама). Средний разработчик за день сталкивается с десятками разных задач типа этой, и иметь для каждого подобного чиха специальную либу просто нерационально.
К тому же разработчик должен как минимум знать, что есть готовое решение для его проблемы, либо поискать его codebase, затем он должен его подключить (не исключено, что оно с подобным именованием наплодит конфликтов имен) и понять как с ним работать. Поздравляю, задачу которая решается стандартными средствами за 1 минуту, вы растянули в несколько раз, при этом добавили зависимостей и сделали код менее понятным для непосвященных.
По поводу php нотации скажу только, что аргумент "мне так нравится" может прокатить только для личных домашних проектов, но не для коммерческих и тем более командных. У меня в команде такой код даже ревью не прошел бы.
Если вам уж так хочется это сделать, то написали бы как-то так, получили бы намного меньше лучей поноса в свой адрес:
Objective-C
1
2
3
4
5
6
7
8
static NSString * const kNoNameClubAwesomeOverheadPredicateMatches = @"MATCHES";
...
 
@interface NSString (NoNameClubAwesomeOverheadPredicate)
 
- (BOOL)evaluatePredicate:(NSString *)predicate withValue:(NSString *)value;
 
@end
Ничего личного, никого не хочу обидеть, но у меня складывается впечатление, что вы, noname_club, никогда не работали в команде хотя бы из 3 - 5 разработчиков, где есть хотя бы пара опытных, и над более менее серьезными проектами, которые бы развивались и поддерживались хотя бы несколько месяцев, а также мало сталкивались с кодом других подобных "самоделкиных", который вам необходимо дорабатывать. Если у вас подобная ерундовая задача, чтобы решить ее быстро и эффективно, требует написания каких-то сторонних утилит, то это прискорбно. Вполне возможно, я ошибаюсь.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
07.05.2014, 09:27  [ТС]     Использование регулярных выражений #10
Переименуйте тему в "неправильное использование регулярных выражений и предикатов" ведь вы все так считаете!

подписка на тему анулирована.

Добавлено через 7 минут
У меня в команде такой код даже ревью не прошел бы.
Знал бы я ваши требования. Можно было бы найти выход. Неужели без сторонних библиотек работаете? так не бывает.
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16688 / 6614 / 431
Регистрация: 12.06.2012
Сообщений: 19,873
Завершенные тесты: 1
07.05.2014, 09:28     Использование регулярных выражений #11
Цитата Сообщение от noname_club Посмотреть сообщение
Переименуйте тему
а зачем, если, как вы сами говорите
Цитата Сообщение от noname_club Посмотреть сообщение
подписка на тему анулирована.
?
И да, вопрос не в правильном/неправильном использовании, а в уместности их применения в конкретной ситуации..

Не по теме:

а я так и вообще проездом, я на objective c и не писал ни разу)

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2014, 11:00     Использование регулярных выражений
Еще ссылки по теме:

Поиск совпадения внутри скобок с использование регулярных выражений - VBA
Здравствуйте! Есть текстовая строка: "Текст (Первый район, Второй район) продолжается текст без скобок. Новое предложение (Первый...

Внедрить использование регулярных выражений для улучшения логики бота - C#
Написал бота. Он парсит текст сообщения, а-ля: "Привет", ответ будет "Привет, как дела?". Но есть проблема, допустим есть такое: ...

Использование регулярных выражений для проверки введённой строки на наличие определённых символов - PowerShell
Подскажите как реализовать: Нужно чтобы при указании имени папки скрипт проверял его на корректность, т.е. нельзя же использовать сиволы...

Как сделать эффективнее код подсчета длины отрезков (использование регулярных выражений, сортировки) - Python
Файл in.txt cодержит корректные вещественные координаты отрезков на плоскости (по одному отрезку в строке) в формате: (x1;y1) (x2;y2) ...


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

Или воспользуйтесь поиском по форуму:
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
07.05.2014, 11:00     Использование регулярных выражений #12
Цитата Сообщение от noname_club Посмотреть сообщение
Знал бы я ваши требования. Можно было бы найти выход. Неужели без сторонних библиотек работаете? так не бывает.
Вы в мое сообщение хорошо читали?
Во-первых требования не "мои", по большей части у нас в команде руководствуются Apple Coding Guidelines for Cocoa, кроме некоторых нюансов, где у нас прописаны свои. Требования эти существуют для повышения эффективности разработки и поддержки кода, а не по чьей-то прихоти.
Во-вторых, я не писал, что мы не используем сторонних библиотек. Конечно используем, но только не для задач типа "сложить 2 и 2".
В-третьих, раз уж отвечаете на адресованное вам сообщение, потрудитесь не игнорировать его большую часть.

Цитата Сообщение от noname_club Посмотреть сообщение
Переименуйте тему в "неправильное использование регулярных выражений и предикатов" ведь вы все так считаете!
подписка на тему анулирована.
А это похоже на детскую обиду. Если предлагаете свои решения и выкладываете их в общий доступ, будьте готовы к аргументированной критике.
Yandex
Объявления
07.05.2014, 11:00     Использование регулярных выражений
Ответ Создать тему
Опции темы

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