Автор Тема: [Perl] обнаружить конструкцию: (не число и не текст)переменная(не число и не текст)  (Прочитано 7785 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Здравствуйте. Подскажите как при помощи регулярных выражений обнаружить конструкцию вида: (не число и не текст)переменная(не число и не текст). Сколько варианто в не пробовал - не хочет работать? Может вы подскажете.
« Последнее редактирование: 03 Сентября 2006, 00:37:05 от Yukko »

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Регулярные выражения
« Ответ #1 : 29 Августа 2006, 00:00:20 »
\\Wпеременная\\W

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Регулярные выражения
« Ответ #2 : 29 Августа 2006, 00:31:47 »
Спасибо. Совсем глупый я.
« Последнее редактирование: 29 Августа 2006, 05:02:07 от xmolex »

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Регулярные выражения
« Ответ #3 : 29 Августа 2006, 11:03:14 »
А может подскажешь как быть с другими буквами? Например, я использую русскую локаль, как тогда тоже самое сделать с латинницей? Или может подскажешь как можно решить такую задачу:
Есть текст:
"Прокуратура возбудила уголовное дело. Прокуратура  (прокуратураter и набор слов) была на высоте. Если что-то и работает, то прокуратура"
Требуется посчитать сколько раз встречается слово "прокуратура", не вхождения, а именно сколько слов. Я хотел сделать так:
@temp = split(/[!(\\w\\d)]+прокуратура[!(\\w\\d)]+/i, $stroka);
Но такой метод не работает, поэтому я и спрашивал, как работает отрицание в регулярных выражениях. Если кто знает поделитесь.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Регулярные выражения
« Ответ #4 : 29 Августа 2006, 11:08:11 »
\\bпрокуратура\\b

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

в принципе, в perldoc perlre есть все.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Регулярные выражения
« Ответ #5 : 31 Августа 2006, 23:01:21 »
отрицание в твоем случае [^\\w\\d]

my $str
=\'Прокуратура\';
my $line = \'Прокуратура возбудила уголовное дело. Прокуратура прокуратураter и набор слов) была на высоте.\';
my $count = 0;
$count++ while $line=~/$str/ig;
print "Count=$count";
 в исканиях.

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Регулярные выражения
« Ответ #6 : 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

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Регулярные выражения
« Ответ #7 : 21 Ноября 2006, 15:32:02 »
while ($a =~ m#(.+?)#g) { print "$1: $2\\n"; }
text: Хы, работает.
text: Хы, работает.

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Регулярные выражения
« Ответ #8 : 21 Ноября 2006, 15:41:16 »
Хм. Может пояснишь почему при ".+?" заработало, а при ".*" работало не правильно?
.* - любой символ повторяется 0 или большее число раз.
.+? - любой символ 1 и более число раз.
Или я что-то не понимаю?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Регулярные выражения
« Ответ #9 : 21 Ноября 2006, 15:48:02 »
perldoc perlre
смотреть на тему greedy

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Регулярные выражения
« Ответ #10 : 22 Ноября 2006, 13:35:56 »
arto извини, я учу английский, но многое еще не понятно.
Может подскажешь еще?
while ($a =~ m#(.+?)#g) { print "$1: $2\\n"; }
А как сделать, чтобы \\w+, кроме http и prog например? Заранее спасибо за терпение.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Регулярные выражения
« Ответ #11 : 22 Ноября 2006, 13:59:29 »
while ($a =~ m#(.+?)#g) { print "$1: $2\\n" if ($1 ne "http" && $1 ne "prog"); }

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Регулярные выражения
« Ответ #12 : 22 Ноября 2006, 14:05:48 »
Смешно. Я не это просил. Ну ладно, можно и так, спасибо.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28