NSRegularExpression sample for comment syntax highlighting

I have this text:

1
word1 word2 " word3 //" word4

I wrote simple solution. I know it can be better. I know about Back Reference, but i don’t have experience with it.

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
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"((@\"|\").*?(\"))"
                                          options:NSRegularExpressionDotMatchesLineSeparators
                                            error:nil];
NSArray *textArray = [expression matchesInString:textString options:0 range:NSMakeRange(0, [textString length])];

for (NSTextCheckingResult *result in textArray) {
    // set color for range
}


// Comments
expression = [NSRegularExpression regularExpressionWithPattern:@"(//[^\"\n]*)"
                                                options:0
                                                error:nil];

NSArray * arrayComments = [expression matchesInString:textString options:0 range:NSMakeRange(0, [textString length])];

for (NSTextCheckingResult *resultComment in arrayComments) {

    BOOL inside = NO;
    for (NSTextCheckingResult *resultText in textArray) {
        NSInteger from = resultText.range.location;
        NSInteger to = resultText.range.location+resultText.range.length;
        NSInteger now = resultComment.range.location;
        if (from < now && now < to) {
            inside = YES;
            break;
        }
    }
    if (!inside) {
        // set color for range
    }
}

Adding SVN revision to Xcode project

Просмотр ревизии в самом приложении предотвращает путаницу и всякие проблемы с отслеживанием текущей версии.

Чтоб отслеживать версию репозитория нам нужно добавить слдеющий код bash скрипта.

1
2
3
4
5
6
7
8
9
10
REVISION=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
APPVERSION=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}`

xported="xported"

if [ $APPVERSION != $xported ]; then
     /usr/libexec/PlistBuddy -c "Delete :CFBundleDisplayVersion" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}
     /usr/libexec/PlistBuddy -c "Add :CFBundleDisplayVersion string" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}
     /usr/libexec/PlistBuddy -c "Set :CFBundleDisplayVersion $APPVERSION.$REVISION" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}
fi

Чтоб добавить скрипт, необходимо выполнить следующие действия:
1. Зажать Ctrl+клик на фаил проекта в дереве проекта
2. Add->New Build Phase -> New Run Script Build Phase
3. Откроется окно в которое нужно вставить скрипт.

Continue reading

RegexKitLite – Lightweight Objective-C Regular Expressions for Mac OS X and iPhone

Very simple installation and in usage.

Installation in iPhone project:
1. Add files RegexKitLite.h and RegexKitLite.m to project.
2. Open Target of project and add -licucore in Other Linker Flags

3. Compile

Example:
Remove tags from web-page.

1
NSString *text =  [content stringByReplacingOccurrencesOfRegex:@"<.*>" withString:@""];

Site resource

Проверка регулярных выражений

Проверка регулярных выражений на онлайн сервисах.

Очень удобный онлайн сервис по адресу http://www.regexpal.com/ не требует перезагрузки страницы для проверки регулярного выражения, написан полностью на javascript. Планрую на своем сайте создать подобный онлайн сервис.

Еще один неплохой сервис проверки, но минус его в том, что необходимо перегружать страницу, а плюс в том, что он выводит результаты, что очень удобно при работе.Плюс есть шпаргалка, но к сожалению она не полная :( http://regexpr.ru/
Continue reading

PHP: Parsing HTML to find Links

Парсинг HTML, поиск линков
Using the default for preg_match_all the array returned contains an array of the first ‘capture’ then an array of the second capture and so forth. By capture we mean patterns contained in ():

# Original PHP code by Chirp Internet: www.chirp.com.au # Please acknowledge use of this code by including this header.

1
2
3
4
5
6
7
8
9
$url = "http://www.example.net/somepage.html";
$input = @file_get_contents($url) or die('Could not access file: $url');
$regexp = "]*href=(\"??)([^\" >]*?)\1[^>]*>(.*)< \/a>";

if(preg_match_all("/$regexp/siU", $input, $matches))
{
# $matches[2] = array of link addresses
# $matches[3] = array of link text - including HTML code
}a>

Continue reading