Thread regex: Bestimmte Bereiche ignorieren (5 answers)
Opened by Jeff at 2010-08-21 17:53

MatthiasW
 2010-08-21 21:02
#140835 #140835
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Ich würde die Kommentare und Zeichenketten aus dem Suchstring entfernen, bevor ich ihn auf geschweifte Klammern teste:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/perl

use strict;
use warnings;

my( $code, @open );

while ( my $line = <> ) {
    $code .= $line;

    $code =~ s/'(?:\\.|[^'])*'|"(?:\\.|[^"])*"//g; # strip strings
    $code =~ s!/\*.*\*/!!g;                        # strip comments

    if ( $code !~ /["']|\/\*/ ) {                  # no open comment/string?
        $code =~ s!//.*!!;                         # strip eol-comments
        
        for ( split //, $code ) {
            push @open, $. if /\{/;
            
            if (/\}/) {
                warn "uncalled-for closing brace at line $.\n" unless @open;
                pop @open;
            } # if
        } # for
        
        $code = '';
    } # if
} # while

warn @open ." open brace(s) not closed at line(s): ". join(", ", @open) ."\n"
    if @open;

edit: } { Fehler korrigiert und Ausgabe erweitert.
edit2: @open[0..$open-1] durch @open ersetzt ;)
edit3: Code nochmals gekürzt

MfG
Last edited: 2010-08-23 18:30:01 +0200 (CEST)
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'

View full thread regex: Bestimmte Bereiche ignorieren