purebasic.info

PureBasic forum
Текущее время: Вс фев 25, 2018 4:57 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
СообщениеДобавлено: Пн июн 16, 2014 11:02 am 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 165
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
sonic писал(а):
Скомпилировать PCRE с поддержкой unicode ?
http://www.regular-expressions.info/pcre.html

Нет. Библиотека PureBasic уже поддерживает уникод и при установленной опции "Create unicode executable" юникод в регулярных выражениях поддерживается. Но стандартные регулярные выражения "кастрированные" и не поддерживают backreference (подстановку \1, \2 и т.д. в ReplaceRegularExpression). На форуме предлагаются варианты решения, например, функция BackrefReplaceRegularExpression, вариант которой был где-то и здесь, но эти решения не работают с юникодом! А я и хочу найти решение и с юникодом и backreference.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 16, 2014 11:56 am 
Не в сети
доцент

Зарегистрирован: Ср апр 02, 2014 12:55 pm
Сообщений: 46
Благодарил (а): 5 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Smitis писал(а):
sonic писал(а):
Скомпилировать PCRE с поддержкой unicode ?
http://www.regular-expressions.info/pcre.html

Нет. Библиотека PureBasic уже поддерживает уникод и при установленной опции "Create unicode executable" юникод в регулярных выражениях поддерживается. Но стандартные регулярные выражения "кастрированные" и не поддерживают backreference (подстановку \1, \2 и т.д. в ReplaceRegularExpression). На форуме предлагаются варианты решения, например, функция BackrefReplaceRegularExpression, вариант которой был где-то и здесь, но эти решения не работают с юникодом! А я и хочу найти решение и с юникодом и backreference.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 16, 2014 1:30 pm 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 165
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
sonic писал(а):
Я предлагаю использовать не встроенную поддержку регекса, а скомпилировать либу самому и подключить.

Это сильно. На такой подвиг я не готов.
К тому же, если имеется ввиду скомпилировать и подключить dll не хотелось бы, что бы были такие "левые" зависимости (в оригинале это простая консольная программа).
И не хочется делать копию велосипеда, ведь эти все функции из pcre, как я понимаю, уже есть.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 16, 2014 3:42 pm 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 547
Благодарил (а): 53 раз.
Поблагодарили: 16 раз.
Пункты репутации: 5
В нерусской версии справочника вполне понятно написано, что \1 не поддержано, почему то в русском переводе это проигнорировали. А я ломаю голову почему мне на вопрос вообще ни как не отвечают.

С подсказки Smitis полез искать BackrefReplaceRegularExpression, нашёл эту страницу
первая ссылка вообще "наша", может кому поможет, а поиск по форум нашел только эти свеженькие посты
https://www.google.com/search?num=100&n ... CBsQvgUoAQ
Это уже что то.



Столь мощный язык без нормальной поддержки регулярки, это нонсенс. Бывает.

Smitis, спасибо за наводку.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 16, 2014 4:41 pm 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 165
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Сейчас сижу разбираюсь. Вроде как там должно работает, только надо смещения по другому пересчитывать, с учётом того, что смещения pcre_exec в БАЙТАХ, а символы в юникодных строках ДВУХбайтовые (это я о своей проблеме).

П.С.
А ещё там получается не совсем корректная замена через ReplaceString - если в результате, скажем, замены \1 получим в строке \2, то следующая замена будет неправильной. И экранирование типа \\1 никак не учитывается.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 16, 2014 8:08 pm 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 547
Благодарил (а): 53 раз.
Поблагодарили: 16 раз.
Пункты репутации: 5
А у меня вообще пишет
Цитата:
POLINK: error: Unresolved external symbol '_pcre_exec'.
POLINK: fatal error: 1 unresolved external(s).

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 16, 2014 8:54 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11081
Благодарил (а): 4 раз.
Поблагодарили: 386 раз.
newJS писал(а):
что ему надо? на что ругается?
Не найдена функция _pcre_exec в библиотеке.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 17, 2014 5:31 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 547
Благодарил (а): 53 раз.
Поблагодарили: 16 раз.
Пункты репутации: 5
Пётр писал(а):
Не найдена функция _pcre_exec в библиотеке.

Да я догадывался, вопрос то, что делать.
Не пойму про первый символ подчёркивания, в коде его нет, в справочнике не понятно про это сказано.
Код:
1
2
3
ImportC "" 
  pcre_exec(*pcre,*extra,subject.s,length,startoffset,options,*ovector,ovecsize)
EndImport



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 17, 2014 8:56 am 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 165
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Надо
Код:
1
2
3
ImportC ""
  pb_pcre_exec(*pcre,*extra,subject.s,length,startoffset,options,*ovector,ovecsize)
EndImport



А вот с юникодом нифига не получается.
Вот есть пример http://www.purebasic.fr/english/viewtop ... 12&t=56955 но не компилируется.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 17, 2014 10:09 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11081
Благодарил (а): 4 раз.
Поблагодарили: 386 раз.
Пример компилируется и работает.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 17, 2014 11:39 am 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 165
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Пётр писал(а):
Пример компилируется и работает.

Выдаёт ошибку POLINK: error: Unresolved external symbol '_SYS_FreeStringNoCheck'.
PB 5.21, PB 5.11


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 17, 2014 12:25 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11081
Благодарил (а): 4 раз.
Поблагодарили: 386 раз.
В 5.21 компилируется и работает.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 18, 2014 2:06 pm 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 165
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Странно, ошибка возникает при использовании p-utf8. В чём дело - не понимаю.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 18, 2014 2:22 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11081
Благодарил (а): 4 раз.
Поблагодарили: 386 раз.
У меня пример компилируется как есть. Ошибок нет.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 19, 2014 5:48 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 547
Благодарил (а): 53 раз.
Поблагодарили: 16 раз.
Пункты репутации: 5
Smitis писал(а):
Надо

Код:
1
2
3
4
ImportC ""
  pb_pcre_exec(*pcre,*extra,subject.s,length,startoffset,options,*ovector,ovecsize)
EndImport
 


Так работает, 5.11


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB