Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сложная регулярка, помогите. 
V
    Опции темы
burakov
Дата 8.12.2012, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Здравствуйте.

Задача:

- Вытащить все слова из текста, начинающиеся с большой буквы (фильтр: минус слова, идущие после точки и пробела, т.е. новые предложения в тексте).

это так сказать самое исходное задание.

я себе упростил до (но кто знает, пусть подскажет , как сделать одной регуляркой исходное)
"вытащить все слова из текста, кроме первого слова предложения".
но все не уверен, что написал регулярку правильно

Код


while ($str =~ /[^(\.|^)]\s(.+?)(\s|,|\.|$)/g) {
       

      print $1 ."\n"';
}



справа от (,+?) мне все понятно и оно работает. можно еще каких нить знаков припинания туда добавить как границу слова.
а вот слева от (.+?) искомого. тут всегда испытаю сложности

здесь нужно сказать скрипту, чтобы он проверял,  чтобы слово было не первым в предложении.
подскжите все ли правильно ?

и может быть можно как то еще изловчиться и учесть условие, чтобы находились слова , начинающиеся только с большой буквы?
спасибо.



Это сообщение отредактировал(а) burakov - 8.12.2012, 20:07


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
Pfailed
Дата 8.12.2012, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 6
Всего: 39



/(?<!^)(?<!\.\s)(\b\p{Lu}.*?\b)/


--------------------
PM MAIL   Вверх
burakov
Дата 8.12.2012, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



спасибо.
вот бы еще код прокомментировали . очень хочется понять как это работает.

ибо я конечно решил задачу..по-своему не так ловко и тонко.
хочется научиться.

если будет время и желание. еще раз спасибо.



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
Pfailed
Дата 9.12.2012, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 6
Всего: 39



Цитата

(\b\p{Lu}.*?\b)

Ищет слово начинающееся с заглавной буквы. \b - граница слова, \p{Lu} - любая заглавная буква (http://www.regular-expressions.info/unicode.html)

Цитата

(?<!^)(?<!\.\s)

Найдя слово смотрим чтобы перед ним небыло точки и пробела. Также смотрим чтобы не было начала строки. Так называемая ретроспективная проверка.


--------------------
PM MAIL   Вверх
burakov
Дата 9.12.2012, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



спасибо.


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.0412 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.