5 Stimmen

Wie man .+ an der ersten Stelle eines Zeichens und nicht an der letzten mit regulären Ausdrücken in Perl stoppt?

Ich möchte ersetzen:

=''' SOMMER/WINTER KONFIGURATIONSDATEIEN'''=

Mit:

=''' SOMMER/WINTER KONFIGURATIONSDATEIEN'''=

Jetzt ist mein vorhandener Code:

$html =~ s/\n(.+)(.+)<\/font>(.+)\n/\n=$1$2$3=\n/gm

Allerdings endet dies mit dem folgenden Ergebnis:

=''' SOMMER/WINTER KONFIGURATIONSDATEIEN``'''=

Jetzt kann ich sehen, was passiert, es entspricht , was nicht das ist, was ich möchte. Ich möchte, dass es beim ersten Auftreten von " endet, nicht beim letzten. Ich dachte, dass das Fragezeichen dort setzen würde, um das zu tun, aber ich habe es mit .+ .+? .* und .*? versucht mit dem gleichen Ergebnis jedes Mal.

Hat jemand eine Idee, was ich falsch mache?

8voto

Mark Byers Punkte 761508

Schreiben Sie .+? an allen Stellen, um jeden Treffer nicht gierig zu machen.

$html =~ s/\\n(.+?)(.+?)<\\/font>(.+?)\\n/\\n=$1$2$3=\\n/gm
                ^                ^      ^            ^ 

Versuchen Sie auch, reguläre Ausdrücke zu vermeiden, um HTML zu analysieren. Verwenden Sie wenn möglich einen HTML-Parser.

7voto

Jon Punkte 15508

Sie könnten .+ in [^"]+ ändern (anstatt "Alles übereinstimmende", "Alles außer einem " übereinstimmenden"...

4voto

Pedro Silva Punkte 4602

Wie Mark sagte, verwenden Sie einfach CPAN dafür.

#!/usr/bin/env perl

use strict; use warnings;
use HTML::TreeBuilder;

my $s = q{ SUMMER/WINTER-KONFIGURATIONSDATEIEN};

my $tree = HTML::TreeBuilder->new;
$tree->parse( $s ); 
print $tree->find_by_attribute( color => 'blue' )->as_HTML;

# =>  SUMMER/WINTER-KONFIGURATIONSDATEIEN

Dies funktioniert für Ihren speziellen Fall, jedoch:

#!/usr/bin/env perl

use strict; use warnings;

my $s = q{ SUMMER/WINTER-KONFIGURATIONSDATEIEN};

print $s =~ m{
                 < .+? >
                 (.+)?

             }mx;

# =>  SUMMER/WINTER-KONFIGURATIONSDATEIEN

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X