|
|
|
новичок
      
участник
Last Login: 13.11.2001 21:24
Сообщ.: 5,
Visits: 56
|
|
Помогите плиз решить проблему. Допустим в .txt-файле есть строка типа <OS><Linux></OS> С помощью каких функций или кода можно разбить эту строку на подстроки вида <OS>, <Linux> и </OS>
|
|
|
|
|
Supreme Being
      
участник
Last Login: 19.02.2002 13:01
Сообщ.: 164,
Visits: 1 805
|
|
$t = "<OS><Linux></OS>"; print $t,""; if ($t =~ /(<\w+>)(<\w+>)(<\/\w+>)/) { print $1, " ",$2, " ", $3; }
|
|
|
|
|
Supreme Being
      
участник
Last Login: 15.03.2003 7:02
Сообщ.: 88,
Visits: 980
|
|
2spartak
это пример исключтельно для того варианта который DarkPerl предложил. :)
2DarkPerl смотря для чего тебе надо их вырезать? если тебе надо просто удалить из текста все теги - то могу посоветовать свой собственный парсер:
@fval=split(/&/,$buf); foreach $i (0 .. $#fval){ ($name,$val)=split (/=/,$fval[$i],2); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $val =~ s/<!--(.|)*-->//g; $val =~ s/<([^>]|)*>//g; $name=~tr/+/ /; $name=~ s/%(..)/pack("c",hex($1))/ge; if (!defined($field{$name})) { $field{$name}=$val; } else { $field{$name} .= ",$val"; } }
здесь текст перекодируется если в нем есть символы вида %XX (так русский в урлах передается), и вырезаются все теги. Резка тегов более-менее умная и почти всегда устраивает, но вообще для этих целей существует модуль LWP. Это глобальный набор модулей на все случаи жизни для веб-програминга. В него входит модуль HTML::Parser который занимается именно разбором HTML. У него это получается намного лучше.
А вообще вопрос написания парсера, многими ОЧЕНЬ недооценивается! Резать абсолютно правильно очень и очень непросто... Вот только некоторые примеры вполне нормального HTML, с которыми возникают траблы почти у всех... Пример 1:
<img src="1.gif" alt="A > B">
Пример 2:
<script>if (a<b && b>a) {}</script>
Пример 3:
<!-- <Комментарий> -->
а теперь все дружно проверили, как у них реагируют ИХ обработчики на такой код...:)
|
|
|
|
|
новичок
      
участник
Last Login: 13.11.2001 21:24
Сообщ.: 5,
Visits: 56
|
|
| Всем большое спасибо, тему можно закрывать, свою проблему уже решил :))
|
|
|
|