Forum Webscript.Ru

Программирование => Регулярные выражения => Тема начата: xmolex от 28 Августа 2006, 23:38:14

Название: [Perl] обнаружить конструкцию: (не число и не текст)переменная(не число и не текст)
Отправлено: xmolex от 28 Августа 2006, 23:38:14
Здравствуйте. Подскажите как при помощи регулярных выражений обнаружить конструкцию вида: (не число и не текст)переменная(не число и не текст). Сколько варианто в не пробовал - не хочет работать? Может вы подскажете.
Название: Регулярные выражения
Отправлено: arto от 29 Августа 2006, 00:00:20
\\Wпеременная\\W
Название: Регулярные выражения
Отправлено: xmolex от 29 Августа 2006, 00:31:47
Спасибо. Совсем глупый я.
Название: Регулярные выражения
Отправлено: xmolex от 29 Августа 2006, 11:03:14
А может подскажешь как быть с другими буквами? Например, я использую русскую локаль, как тогда тоже самое сделать с латинницей? Или может подскажешь как можно решить такую задачу:
Есть текст:
"Прокуратура возбудила уголовное дело. Прокуратура  (прокуратураter и набор слов) была на высоте. Если что-то и работает, то прокуратура"
Требуется посчитать сколько раз встречается слово "прокуратура", не вхождения, а именно сколько слов. Я хотел сделать так:
@temp = split(/[!(\\w\\d)]+прокуратура[!(\\w\\d)]+/i, $stroka);
Но такой метод не работает, поэтому я и спрашивал, как работает отрицание в регулярных выражениях. Если кто знает поделитесь.
Название: Регулярные выражения
Отправлено: arto от 29 Августа 2006, 11:08:11
\\bпрокуратура\\b

отрицание -- ?

в принципе, в perldoc perlre есть все.
Название: Регулярные выражения
Отправлено: Green Kakadu от 31 Августа 2006, 23:01:21
отрицание в твоем случае [^\\w\\d]

my $str=\'Прокуратура\';
my $line = \'Прокуратура возбудила уголовное дело. Прокуратура прокуратураter и набор слов) была на высоте.\';
my $count = 0;
$count++ while $line=~/$str/ig;
print "Count=$count";
Название: Регулярные выражения
Отправлено: xmolex от 21 Ноября 2006, 13:56:23
Народ помогите. Не стал заводить новую ветку, чтобы не захламлять.
Имеется строка $local_file=\'  Хы, работает.    Хы, работает.  \';

Там где знак (_) значит могут быть пробелы, а могут и не быть.
Нужно найти строки: что-то

$temp = "<--*";
while ($local_file =~ /(<\\!--\\*\\s*?\\w+\\s*?-->)([^$temp]*)(<\\!--\\*\\s*?\\/\\w+\\s*?-->)/ig)
{ print "|$1|$2|$3|
\\n"; }

Но он найти не может, а если
while ($local_file =~ /(<\\!--\\*\\s*?\\w+\\s*?-->)(.*)(<\\!--\\*\\s*?\\/\\w+\\s*?-->)/ig)
{ print "|$1|$2|$3|
\\n"; }
то находит один раз вместо двух. Что не так?
Название: Регулярные выражения
Отправлено: arto от 21 Ноября 2006, 15:32:02
while ($a =~ m#(.+?)#g) { print "$1: $2\\n"; }
text: Хы, работает.
text: Хы, работает.
Название: Регулярные выражения
Отправлено: xmolex от 21 Ноября 2006, 15:41:16
Хм. Может пояснишь почему при ".+?" заработало, а при ".*" работало не правильно?
.* - любой символ повторяется 0 или большее число раз.
.+? - любой символ 1 и более число раз.
Или я что-то не понимаю?
Название: Регулярные выражения
Отправлено: arto от 21 Ноября 2006, 15:48:02
perldoc perlre
смотреть на тему greedy
Название: Регулярные выражения
Отправлено: xmolex от 22 Ноября 2006, 13:35:56
arto извини, я учу английский, но многое еще не понятно.
Может подскажешь еще?
while ($a =~ m#(.+?)#g) { print "$1: $2\\n"; }
А как сделать, чтобы \\w+, кроме http и prog например? Заранее спасибо за терпение.
Название: Регулярные выражения
Отправлено: arto от 22 Ноября 2006, 13:59:29
while ($a =~ m#(.+?)#g) { print "$1: $2\\n" if ($1 ne "http" && $1 ne "prog"); }
Название: Регулярные выражения
Отправлено: xmolex от 22 Ноября 2006, 14:05:48
Смешно. Я не это просил. Ну ладно, можно и так, спасибо.