0

HTML ドキュメントから HTML タグ以外のものを代用したいと考えています。したがって、基本的にはドキュメント内のすべてのテキストを削除しようとしています。

文字列からすべての HTML を削除する以下の正規表現がありますが、反対のシナリオについては助けが必要です。

$string =~ s/<[^>]+>//g;

ありがとう。

4

4 に答える 4

0

LibXML を使用すると、タグ/コメント/処理命令以外のものを簡単に選択して削除できます

#!/usr/bin/perl --
use strict;
use warnings;
use XML::LibXML 1.70; ## for load_html/load_xml/location
use XML::LibXML::PrettyPrint;

Main( @ARGV );
exit( 0 );
sub Main {
    binmode STDOUT;
    my $loc = shift or die "
Usage:
    $0  ko00010.html
    $0  http://example.com/ko00010.html\n\n";

    my $dom = XML::LibXML->new(
        qw/
          recover 2
          no_blanks 1
          /
    )->load_html( location => $loc, );

## http://www.w3.org/TR/xpath/#node-tests
## http://www.w3.org/TR/xpath/#NT-NodeType
## http://www.w3.org/TR/xpath/#section-Text-Nodes
    for my $text ( $dom->findnodes(q{ //text() }) ){
        node_detach( $text );
    }


    local $XML::LibXML::skipXMLDeclaration = 1; ## <?xml ?>
    local $XML::LibXML::setTagCompression = 0;  ## <p />

#~     print "$dom";

    my $pp  = XML::LibXML::PrettyPrint->new_for_html;
    $pp->{indent_string}=' ';
    print $pp->pretty_print( $dom );
}
sub node_detach {
    my( $self ) = @_;
    $self->parentNode->removeChild( $self );
}
于 2013-10-24T08:28:18.717 に答える
0

これを探していますか?

$string =~ s/>[^<]*</></mg;

それともこれ?

$string =~ s/(?<=>)[^<]*(?=<)//mg;
于 2013-10-22T23:45:52.117 に答える