HTML ドキュメントから HTML タグ以外のものを代用したいと考えています。したがって、基本的にはドキュメント内のすべてのテキストを削除しようとしています。
文字列からすべての HTML を削除する以下の正規表現がありますが、反対のシナリオについては助けが必要です。
$string =~ s/<[^>]+>//g;
ありがとう。
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 );
}
これを探していますか?
$string =~ s/>[^<]*</></mg;
それともこれ?
$string =~ s/(?<=>)[^<]*(?=<)//mg;