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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти теги <SPAN> с тегами <А> внутри. Возможно? 
:(
    Опции темы
barbiturat
Дата 24.12.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Встала задача найти все файлы, в которых есть теги <span>, содержащие внутри себя теги <a>.
Можно ли такое сделать при помощи regexp'ов, или нужно все перелопачивать ручками?

Вот пример. Можно ли здесь найти только <span>, содержащие внутри себя теги <a>?
Код

<span>
    simple text
</span> 
<a href="#">text</a>
<span>
    <a href="#">text</a>
</span> 
<span>
    <a href="#">text</a>
</span> 
<span>
    simple text
</span> 


Да, я не сказал, что выражение нужно для того, что б забить в строку поиска в любом редакторе, поддерживающем поиск по regexp (например, Eclipse или Idea)

Это сообщение отредактировал(а) barbiturat - 24.12.2009, 18:51
PM MAIL   Вверх
DEER
Дата 24.12.2009, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



можно!


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
barbiturat
Дата 24.12.2009, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



DEER, думаю, что ты ошибаешься. Мы сегодня пол дня над этой головоломкой бились. Решения через RegExp, похоже, нету.

Это сообщение отредактировал(а) barbiturat - 24.12.2009, 20:47
PM MAIL   Вверх
DEER
Дата 24.12.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



можно увольнять отдел ваш smile))))
Код

#!/usr/bin/perl
use Data::Dumper;
my $var = <<GGG;
<span>
    simple text
</span> 
<a href="#">text1</a>
<span>
    <a href="#">text2</a>
</span> 
<span>
    <a href="#">text3</a>
</span> 
<span>
    simple text
</span> 
GGG
# print $var."\n";
while($var =~ /<span.*?>.*?(<a.*?>.*?<\/a>).*?<\/span>/igs)
{
    print "S\n".$1;
}



--------------------
 
PM MAIL WWW ICQ MSN   Вверх
barbiturat
Дата 24.12.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



DEER, не подходит :(
Под твой шаблон
Код

<span.*?>.*?(<a.*?>.*?<\/a>).*?<\/span>/igs

попадает целиком следующий блок:
Код

<span>
    simple text
</span> 
<a href="#">text</a>
<span>
    <a href="#">text</a>
</span>

Как видим, во первых, тут сразу несколько спанов, а во вторых, в одном из них вообще нет тега <a> 

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



вы запускали, или теоритезируете?
вот лог запуска того текста, что я привел
Код

c:\Oleg\Freelance>perl 1.pl
S
<a href="#">text1</a>S
<a href="#">text3</a>
c:\Oleg\Freelance>

код 1.pl полностью
Код

#!/usr/bin/perl
use Data::Dumper;
my $var = <<GGG;
<span>
    simple text
</span> 
<a href="#">text1</a>
<span>
    <a href="#">text2</a>
</span> 
<span>
    <a href="#">text3</a>
</span> 
<span>
    simple text
</span> 
GGG
# print $var."\n";
while($var =~ /<span.*?>.*?(<a.*?>.*?<\/a>).*?<\/span>/igs)
{
    print "S\n".$1;
}

как говориться, непиздите smile

Это сообщение отредактировал(а) DEER - 24.12.2009, 22:24


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
barbiturat
Дата 24.12.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я писал:

Цитата(barbiturat @  24.12.2009,  18:42 Найти цитируемый пост)
выражение нужно для того, что б забить в строку поиска в любом редакторе, поддерживающем поиск по regexp (например, Eclipse или Idea)


Т.е., я ищу не скрипт, а чисто выражение regexp, которое можно забить в любом редакторе, поддерживающем perl-совместимый синтаксис (Eclipse, Aptana, Idea и любых подобных)
PM MAIL   Вверх
DEER
Дата 24.12.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



тогда изучайте регэкспы именно в данном IDE: Eclipse и Idea, это ж java
нафиг сюда постить? запостите в форуме  про java!
Вы спросили в форуме про перл. я вам дал перл код, который это делает. Всё ништяк!

Это сообщение отредактировал(а) DEER - 24.12.2009, 22:45


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
amg
Дата 25.12.2009, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



DEER, замените в своем коде $1 на $& и попробуйте.

barbiturat, конечно, в полном объеме на регэспах решить вашу задачу очень сложно (например, по-хорошему нужно учитывать, что simple text может быть таким: "<a href='#'>text2</a>").
Но упрощенное решение тем не менее возможно (редактор дожен поддерживать расширенный синтаксис регулярных выражений). В моем редакторе (nedit) так: 
(?n\<span(?:.(?!\>))*\>(?:.(?!\</span\>))*\<a.*?\>.*?\</a\>.*?\</span\>)
Здесь из-за особенностей реализации регэкспов в нем все < и > заэкранированы, а (?n) равносильно модификатору /s.


PM MAIL   Вверх
barbiturat
Дата 25.12.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



amg, спасибо огромнейшее! Твой код действительно работает.
Мне подсказали еще такой вариант:
Код

(?s)<span(.(?!</span))*?<a.*?</span>


Это сообщение отредактировал(а) barbiturat - 25.12.2009, 12:23
PM MAIL   Вверх
amg
Дата 25.12.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



Цитата(barbiturat @  25.12.2009,  12:12 Найти цитируемый пост)
Мне подсказали еще такой вариант:
Этот вариант еще более упрощенный, он даже и не пытается искать правильный html. Ему подойдет и такое:
<span <a </span>
Но если работает, то и ладно smile .

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


 




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


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

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