Schrift
[thread]12044[/thread]

Regex Match trifft nicht case-sensitive

Leser: 1


<< >> 8 Einträge, 1 Seite
roooot
 2008-06-18 17:57
#111227 #111227
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe folgende RegEx
Code: (dl )
$_->{value} =~ /[A-Z\(\)]*/ixms


sollte doch nur für NOW() treffen aber nicht now() ? Trifft aber gar nichts.

Regex Coach (ein Regex Programm zum Prüfen) macht genau das was es soll.
Viele Grüße :)
renee
 2008-06-18 18:03
#111228 #111228
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Lass den Modifier 'i' weg (der steht für case-insensitive bzw. ignore case)...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nepos
 2008-06-18 18:03
#111229 #111229
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Da ist ein i bei den Flags, dadurch wird das auf jeden Fall mal case insensitiv.
Was genau willst du denn matchen?
renee
 2008-06-18 18:04
#111230 #111230
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
BTW: Hier würdest Du auch (((( und A(Z) treffen. Keine Ahnung ob das so gewollt ist...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
FoolAck
 2008-06-18 18:06
#111231 #111231
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Also erstmal matcht diese regex alles (weil sie einen Leerstring matcht..).
Dann ist das Ganze doch case insensitive, wieso sollte das dann nur für NOW() matchen?

Und last but not least: in character classes kannst du dir die backslashes vor den Rundklammern sparen.

Edit: natürlich zu spät..
roooot
 2008-06-18 18:25
#111234 #111234
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Klar den i hatte ich auch gar nicht in meinem Code. Ist beim Abschreiben hinzugekommen

Folgendes will ich machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
    my $sql_formed_values =
        join ',',
        map {
            if($_->{value} =~ /`[\w]*`\s*[\+|-]\s*[\d]+/xms ||   # sql algebra
              $_->{value} =~ /[A-Z\]*/xms) {                  #sql command
                qq{`$_->{name}` = $_->{value}}
            }
            else {
                qq{`$_->{name}` = '$_->{value}'}
            }
        } @value_array;

@value_array ist ein Array mit lautet Gashes drin, nach dem Schema
Code (perl): (dl )
1
2
3
4
{
     name=>'foo',
     value=>'bar',
}
Nun will ich hier auf SQL Befehle reagieren, die in meinen Fällen immer groß geschrieben sind und () am Ende haben (2. Case), in einem Wort: NOW() oder auch SQl Rechenaufgaben (1. Case).
Allerdings erstellt er mir, wenn ich das so mache bei folgenden Werten (diese werden in Hases wie oben umgeformt):
Code (perl): (dl )
1
2
3
4
# name    => value
timestamp => 'NOW()',
filename  => '1:cat.js#1',
hash      => '7a3aa47569e0a5dc78b9bcbc29ad08dc650eb7ed',

das hier:
Code: (dl )
`hash` = 7a3aa47569e0a5dc78b9bcbc29ad08dc650eb7ed,`timestamp` = NOW(),`filename` = 1:cat.js#1


Er ignorniert also Groß und kleinschreibung.



Wo muss ich denn $ einbauen, damit die () nur am Schluss stehen dürfen? So würde ich vorschlagen :)
Code: (dl )
^[A-Z]*[()]*$
Viele Grüße :)
roooot
 2008-06-18 18:32
#111235 #111235
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
ok danke jetzt klappts :)

Code (perl): (dl )
$_->{value} =~ /^[A-Z]*[()]*$/xms
Viele Grüße :)
MatthiasW
 2008-06-18 18:43
#111237 #111237
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Deine rx lässt aber noch viieel mehr zu:
"" ( Leerstring )
"A"
"("
")))"
"ASDF)"
"KK(("
...

Wenn das kein Problem darstellt, kannstes so lassen, ich würde aber wenigstens den letzten rx in folgenden abändern:
/^[A-Z]+\(\)$/

Der andere scheint so ganz i.O., aber es sieht so aus, als wüsstest du nicht, was [] machen, denn als Operator zählt bei dir auch ein | ;)

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
<< >> 8 Einträge, 1 Seite



View all threads created 2008-06-18 17:57.