Отпарсить строку, несколько критериев

uniqueman
Уже с Приветом
Posts: 2013
Joined: 16 Mar 2002 10:01
Location: New York City

Отпарсить строку, несколько критериев

Post by uniqueman »

Какой обычно алгоритм построения парсинга строки применяется если нужно выполнить такие условия:

1. Существует несколько критериев поиска в строке. Пример:

а) Определить существует ли в строке слово "market" и НЕ существует слова "closed".

б) Определить существует ли в строке слово начинающиеся на слово "cut", то есть критерий "cut*".

в) Определить существует ли в строке слово имеющее в середине подстроку "cut", например "exeCUTive".

И тому подобное.. короче говорят есть набор критериев. Первое что приходит на ум, перебирать все критерии и как только встретится условие удовлетворящее какому то, закончить парсинг и выдать ответ.

Есть ли какие то методы, которые бы ускорили бы такой поиск? Поможет ли multithreading в этом случае? типа каждый критерий обрабатывать в отдельном треде?

Подкинтье любые идеи по этому поводу. Благодарен
User avatar
WildVlad
Уже с Приветом
Posts: 3982
Joined: 13 Jul 2000 09:01
Location: SVX -> BOS -> BUR -> SJC

Post by WildVlad »

1. Посмотрите для начала, например, вот здесь: http://algolist.manual.ru/ Очень неплохой источник частовстречаемых алгоритмов.

2. Мултитреадинг может быть и поможет, если есть несколько процессоров. На одном процессоре даже теоретически нет выигрыша. Да и вряд ли удастся хорошо распараллелить задачу. Кстати, есть оценки на длину строки, количество и сложность одновременно анализируемых критериев?
I hated LA
User avatar
Fielder
Уже с Приветом
Posts: 695
Joined: 26 Mar 1999 10:01
Location: Moscow -> Rockville, MD -> Muenchen

Post by Fielder »

Использoвать pcre библиотеку и написать
правильние patterns, может и одного будет достаточно.

http://www.pcre.org/
Du glaubst zu schieben, und du wirst geschoben. (c) Goethe
User avatar
Okie
Уже с Приветом
Posts: 932
Joined: 18 Mar 2000 10:01
Location: Seattle

Post by Okie »

а что, нельзя какою-нибудь grep библиотеку использовать? Зачем самому всё парсить?
uniqueman
Уже с Приветом
Posts: 2013
Joined: 16 Mar 2002 10:01
Location: New York City

Post by uniqueman »

забыл сказать. Платформа Windows. Может какие либы для этого есть
testuser
Уже с Приветом
Posts: 1071
Joined: 18 Nov 2003 22:53
Location: MA

Post by testuser »

В джаве есть regexps, исходники можно посмотреть. А если на джаве писать, то и смотреть ничего не нужно.
В перле тоже есть regexp, он под виндой работает, насчет исходников не знаю, как впрочем и насчет библиотек (но вроде перл пользуется сишными библиотеками для регулярных выражений).
User avatar
IA72
Уже с Приветом
Posts: 956
Joined: 04 Mar 2002 10:01

Post by IA72 »

uniqueman wrote:забыл сказать. Платформа Windows. Может какие либы для этого есть


Забыли сказать еще, какая среда и язык. VBScript.RegExp посмотрите
uniqueman
Уже с Приветом
Posts: 2013
Joined: 16 Mar 2002 10:01
Location: New York City

Post by uniqueman »

IA72 wrote:
uniqueman wrote:забыл сказать. Платформа Windows. Может какие либы для этого есть


Забыли сказать еще, какая среда и язык. VBScript.RegExp посмотрите


Visual Studio, C++
Mongush
Уже с Приветом
Posts: 446
Joined: 04 Jan 2002 10:01
Location: Irkutsk->Rockville, MD->Dallas, TX

Post by Mongush »

uniqueman wrote:
IA72 wrote:
uniqueman wrote:забыл сказать. Платформа Windows. Может какие либы для этого есть


Забыли сказать еще, какая среда и язык. VBScript.RegExp посмотрите


Visual Studio, C++

Есть куча библиотек для регулярных выражений. Вон даже в .NET есть :)
Мне лично нравится boost regex.
uniqueman
Уже с Приветом
Posts: 2013
Joined: 16 Mar 2002 10:01
Location: New York City

Post by uniqueman »

ни разу не использовал regexpr, но слышал про них. Единственный вопрос.

Мне надо не просто найти какое то слово в тексте и определить также его положение в строке, то бишь если я задал найти слово "market", мне надо чтобы вернулось позиция первого символа в строке.

Возможно ли это через regexpr?
Mongush
Уже с Приветом
Posts: 446
Joined: 04 Jan 2002 10:01
Location: Irkutsk->Rockville, MD->Dallas, TX

Post by Mongush »

uniqueman wrote:ни разу не использовал regexpr, но слышал про них. Единственный вопрос.

Мне надо не просто найти какое то слово в тексте и определить также его положение в строке, то бишь если я задал найти слово "market", мне надо чтобы вернулось позиция первого символа в строке.

Возможно ли это через regexpr?

Да.

Return to “Вопросы и новости IT”