Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > \w - символ или слово


Автор: Akella 11.3.2013, 15:51
здесь написано, что \w - это слово
http://regexpr.ru/cheatsheet/


а здесь, что \w - это символ
http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F

Это какие-то разные стандарты?


Автор: Pfailed 11.3.2013, 17:06
символ

Автор: DurRandir 11.3.2013, 21:13
perldoc perlre:


Код

  \w        [3]  Match a "word" character (alphanumeric plus "_", plus
                   other connector punctuation chars plus Unicode
                   marks)

Автор: Arantir 11.3.2013, 22:04
Цитата(Akella @  11.3.2013,  14:51 Найти цитируемый пост)
здесь написано, что \w - это слово
http://regexpr.ru/cheatsheet/
Akella, там написано, цитирую, 
Цитата

Character Classes
...      ...
\w       Word

Что понимать следует как "Word Character". Что дословно можно перевести, как "символ слова" или более приятно на слух "словесный символ", в адаптированной версии "символ, из которого состоят слова". Что есть, просто по русски и по версии вики, — "буквенный символ", исходя из понимания термина "буква".

Как-то так =)

Автор: Akella 12.3.2013, 12:25
ясно, а то у меня проблемы с составлением выражения относительно такого текста:
Цитата
Email 110 000 у.е. 2-комн/ 2-к квартира, низ пр. Кирова, новый дом, сдан в эксплуатацию в 2010, 12 этаж 25 этажного панельного дома, панорамные окна с видом на стадион, скоростные лифты, консьерж, ОСМД, выполнен дорогой ремонт по эксклюзивному проекту дизайнеров студии "Belle", общая площадь 68 м.кв., кухня 9 м.кв., спальня 14 м.кв., имеется отдельное меблированое помещение под гардероб, комната для стирки и сушки белья, МПО, итальянский кафель, встроенная кухня с техникой "Samsung", сплит-система "LG", мебель по индивидуальному проекту, мягкая мебель, телевизор "Samsung", холодильник "Samsung", стиральная машина, бойлер. Право собственности. Полностью готова к проживанию. Цена эквивалент 110 000 дол. США. Мебель и техника в стоимости!


Не получается найти три числа, обозначенные красным.
Например, площадь общую.
Вот выражение:
Код
\w+\s\d+\s+м\.кв\.

по идее \w+ должно найти слово "площадь", за которым расположен пробел и далее цифры, далее опять пробел и "м.кв.".
Но выражение ничего не находит.

Автор: DurRandir 12.3.2013, 13:06
Скорее всего, проблемы с кодировкой. То, что \w матчит, сильно зависит от локали и utf'ности текста _и_ регулярки. 

Автор: alezzz 12.3.2013, 13:13
в качестве альтернативы локали попробуйте заменить \w на [а-я], с cp1251 кажется нормально работает, с utf не очень.

Автор: Akella 12.3.2013, 13:30
Цитата(alezzz @  12.3.2013,  13:13 Найти цитируемый пост)
аменить \w на [а-я]


пробовал
да, так работает, я просто забыл написать об этом
но хотелось бы именно \w+

Добавлено через 33 секунды
вот тебе и юникод  smile 

Автор: alezzz 12.3.2013, 13:56
Цитата(Akella @  12.3.2013,  13:30 Найти цитируемый пост)
вот тебе и юникод

Для юникода можно использовать use utf8; только-что посмотрел, работает. Но вы, если не ошибаюсь, регулярки не в perl используете?

Автор: Akella 12.3.2013, 14:18
Нет, DiRegExp для Delphi, Perl совместимые.

Автор: alezzz 12.3.2013, 14:22
я про другое
Код

use strict;
use utf8;

my $a = 'Email 110 000 у.е. 2-комн/ 2-к квартира, низ пр. Кирова, новый дом, сдан в эксплуатацию в 2010,
12 этаж 25 этажного панельного дома, панорамные окна с видом на стадион, скоростные лифты, консьерж, ОСМД,
выполнен дорогой ремонт по эксклюзивному проекту дизайнеров студии "Belle", общая площадь 68 м.кв., кухня 9 м.кв.,
спальня 14 м.кв., имеется отдельное меблированое помещение под гардероб, комната для стирки и сушки белья,
МПО, итальянский кафель, встроенная кухня с техникой "Samsung", сплит-система "LG", мебель по индивидуальному
проекту, мягкая мебель, телевизор "Samsung", холодильник "Samsung", стиральная машина, бойлер. Право собственности.
Полностью готова к проживанию. Цена эквивалент 110 000 дол. США. Мебель и техника в стоимости!';

while ($a =~ /\w+\s\d+\s+м\.кв\./g){
    print $& . "\n";
}


Код

площадь 68 м.кв.
кухня 9 м.кв.
спальня 14 м.кв.

Автор: Akella 12.3.2013, 14:23
да, есть такое
user posted image

Автор: DurRandir 13.3.2013, 01:46
Цитата(alezzz @ 12.3.2013,  14:13)
в качестве альтернативы локали попробуйте заменить \w на [а-я], с cp1251 кажется нормально работает, с utf не очень.

Не совсем. В 1251 ё выпадает - надо [ёа-я]. Но вроде бы проблема решилась)

Автор: alezzz 13.3.2013, 19:22
да, помнил про ё, но забыл где именно с ним проблема

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)