Здравствуйте, 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>>
Здравствуйте, 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>>
Дана строка. Требуется с помощью регулярных выражений получить все слова из нее. Как это сделать?
Спасибо.
Здравствуйте, 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 =~ ... ) означает, неявно запускается цикл и из строки по очереди выдергиваются все слова подпадающие под регэксп?