Автор Тема: выделить символы которые дали совпадение  (Прочитано 1739 раз)

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

  • Гость
hi

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

простой пример
регулярное выражение: /cro(.{1})s/
текст: cross
нужно выделить cro и s в конце слова, а четвертую s выделять не надо
но этот пример лишь чатный случай, его реализовать несложно, а решить задачу в общем виде у меня не получается

помогите пожалуйста

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
выделить символы которые дали совпадение
« Ответ #1 : 24 Января 2002, 16:27:46 »
m/(cro)(.{1})(s)/;
print $1,$3;

Вуаля! :)

perldoc perlop в части m//
2B OR NOT 2B = FF

  • Гость
выделить символы которые дали совпадение
« Ответ #2 : 24 Января 2002, 16:44:01 »
Цитировать
m/(cro)(.{1})(s)/;
print $1,$3;


боюсь ты не совсем правильно меня понял
мне нужно не получить эти символы, а выделить их - например верхним регистром - в исходном тексте
т.е. я должен получить СROsS
а в общем случае мне нужны позиции тех символов которые надо выделить

регулярное выражение заведомо мне неизвестно, оно составляется на лету

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
выделить символы которые дали совпадение
« Ответ #3 : 24 Января 2002, 17:17:39 »
Как объясняешь так и понял.:)

s/(cro)(.{1})(s)/uc($1).$2.uc($3)/e;

А в общем случае все зависит естественно от того, как будет конструироваться регулярное выражение.:)
2B OR NOT 2B = FF

 

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