Thread regex Klammern (6 answers)
Opened by perl at 2011-02-13 02:58

Linuxer
 2011-02-13 23:01
#145625 #145625
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

hier ein Vorschlag, der die Untersuchung mit zwei Regex vornimmt.
Dafür muss aber sichergestellt sein, dass der untersuchte String:
a) wirklich nur maximal eine Befehlssequenz enthält
b) keinen String enthält, der aussieht wie ein Befehlsargument aber keines ist

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
#! /usr/bin/perl
# vim:ts=4 sw=4 sts=4 et nu fdc=3:
use strict;
use warnings;

my @str = (
    "bla bla \\mycommand{arg1}{arg2}{arg3} foo foo",
    "Will I work? \\whatever",
    "this will be wrong: \\cmd{arg1} {bad_style_arg}",
);

my $re_command  = qr/\\(\w+)/;
my $re_argument = qr/{([^}]+)}/;

for my $str (@str) {

    # prerequisite: only one command sequenz in $str
    if (   ( my ($cmd) = $str =~ $re_command )
        && ( my @args = $str =~ m/$re_argument/g ) >= 0 )
    {
        print "$cmd with ", scalar(@args), " arguments: @args\n";
    }

}

__END__
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread regex Klammern