Regexp. Выделение слов из строки
От: FreshMeat Россия http://www.rsdn.org
Дата: 01.06.05 14:15
Оценка:
Дана строка. Требуется с помощью регулярных выражений получить все слова из нее. Как это сделать?
Спасибо.
Хорошо там, где мы есть! :)
Re: Regexp. Выделение слов из строки
От: conraddk Россия  
Дата: 02.06.05 04:42
Оценка: 6 (1)
Здравствуйте, FreshMeat, Вы писали:

FM>Дана строка. Требуется с помощью регулярных выражений получить все слова из нее. Как это сделать?

FM>Спасибо.
$txt="Выделение слов в тексте - дело нехитрое, надо только определиться, что такое \"слово\".".
"It depends on the language as well.".
"Примеры: don't, что-нибудь, 2-е июня, 2nd, 10(?) строк...";
$letters = "A-Za-zА-Яа-я";
@parts = ($txt =~ m/([$letters\d][$letters\d'-]*)/g);
print join("\n", @parts);

Результат:
Выделение
слов
в
тексте
дело
нехитрое
надо
только
определиться
что
такое
слово
It
depends
on
the
language
as
well
Примеры
don't
что-нибудь
2-е
июня
2nd
10
строк
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Все на свете должно происходить медленно и неправильно...
Re[2]: Regexp. Выделение слов из строки
От: FreshMeat Россия http://www.rsdn.org
Дата: 02.06.05 08:00
Оценка:
Здравствуйте, conraddk, Вы писали:

C>
C>$txt="Выделение слов в тексте - дело нехитрое, надо только определиться, что такое \"слово\".".
C>"It depends on the language as well.".
C>"Примеры: don't, что-нибудь, 2-е июня, 2nd, 10(?) строк...";
C>$letters = "A-Za-zА-Яа-я";
C>@parts = ($txt =~ m/([$letters\d][$letters\d'-]*)/g);
C>print join("\n", @parts);
C>

Спасибо.
Для простоты, пусть строка задана на английском, в нижнем регистре, без символов '-"
Например "one two three four"
Такое упрощение допустимо?
@parts = ($txt =~ m/([a-z]*)/g);

тогда
m — multiline (для чего используется слеш после m?)
g — (?)
[a-z] — символы от 'a' до 'z'
* — 0 или более

Я не знаком с перловым синтаксисом, поэтому такой вопрос — запись ($txt =~ ... ) означает, неявно запускается цикл и из строки по очереди выдергиваются все слова подпадающие под регэксп?
Хорошо там, где мы есть! :)
Re[3]: Regexp. Выделение слов из строки
От: conraddk Россия  
Дата: 02.06.05 09:25
Оценка: 9 (1)
Здравствуйте, FreshMeat, Вы писали:

FM>Спасибо.

FM>Для простоты, пусть строка задана на английском, в нижнем регистре, без символов '-"
FM>Например "one two three four"
FM>Такое упрощение допустимо?
FM>
FM>@parts = ($txt =~ m/([a-z]*)/g);
FM>

FM>тогда
FM>m — multiline (для чего используется слеш после m?)
Нет, m — match (в отличие от substitute). В слэши заключается собственно выражение.
FM>g — (?)
global — искать все соответствия.
FM>[a-z] — символы от 'a' до 'z'
FM>* — 0 или более
Только правильнее будет + (один или более). И внешние скобки можно опустить.

FM>Я не знаком с перловым синтаксисом, поэтому такой вопрос — запись ($txt =~ ... ) означает, неявно запускается цикл и из строки по очереди выдергиваются все слова подпадающие под регэксп?

Примерно так (насчет "цикл" и "все" — см. про ключ g). Соответственно, само выражение будет [a-z]+. Может быть, имеет смысл подумать про контекст, в котором встречается слово. Хотя, если там только латинские буквы и пробелы, то такого более, чем достаточно.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Все на свете должно происходить медленно и неправильно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.