# Regular Expression (Replace) gesucht



## bits'bytes (17 Januar 2011)

Hallo Leute,

ich würde gerne folgendes - bedingt - ändern

von
<Parameter ID="p2001_objflags" Value="0" />


auf
<Parameter ID="p2001_objflags" Value="1" />


Bedingung: 

z.B. alle "p2xxx
und alle "p6xxx
jedoch nicht die "p1xxx

Ich schaffe es zwar mit Regular Exp die gewünschten Parameter zu finden, z.B. 

p22[0-f]{2}_objflags" Value="0"

allerdings bekomme ich das ersetzen nicht hin ..., so wie im Screenshot gibt er mir direkt den Text [0-f].... in den Ausdruck ?!?!

Ich verwende überigens "grepWin" .


Danke schon mal
bg
bb


----------



## Thomas_v2.1 (17 Januar 2011)

In Perl könnte man das so schreiben:

```
$s = "<Parameter ID=\"p2001_objflags\" Value=\"0\" />";

$s =~ s/(<Parameter ID=\"p[26][0-9]{3}_objflags\" Value=)(\"[0]\")( \/>)/$1"1"$3/g;
```

Die Escape Zeichen für die Anführungszeichen kann du bei deinem Programm so wie es im Screenshot aussieht weglassen.


----------



## bits'bytes (19 Januar 2011)

Hallo Thomas,

danke für deine Mühe. 

Leider kann ich deinen Vorschlag im Programm grepWin nicht umsetzen.

Die Eingabe bewirkt nichts, das Programm kennt sich damit nicht aus...

Verwende ich so wie von dir angedeutet $0   ($1, $2,... gibts nicht)   bekomme ich den richtigen String ohne der Suchmaske zurück (die Suchmaske im String war ja das ursprüngliche Problem)

Jetzt stellt sich noch die Frage wie ich den "1" gegen eine "0" getauscht bekomme ?

Kennt jemand vielleicht grepWin ??

Danke
bg
bb


----------



## Thomas_v2.1 (19 Januar 2011)

bits'bytes schrieb:


> Die Eingabe bewirkt nichts, das Programm kennt sich damit nicht aus...
> 
> Verwende ich so wie von dir angedeutet $0   ($1, $2,... gibts nicht)   bekomme ich den richtigen String ohne der Suchmaske zurück (die Suchmaske im String war ja das ursprüngliche Problem)
> 
> ...



Ich habe mir jetzt nur mal die Screenshots mit den Beispielen von grepWin angesehen. Das sieht da zumindest so aus als ob es mit der Syntax von meiner Perl-Regex kompatibel ist.

Bei meiner Regex ist die Syntax so:
s/Suchmuster/Ersatzzeichenkette/

Alles was im Suchmuster in runden Klammern () steht kommt bei matching in die Variable $1, was in der zweiten runden Klammer in $2 usf.
Das scheint bei deinem Programm auch zu funktionieren.

Imho müsstest du in die obere Zeile:

```
(<Parameter ID="p[26][0-9]{3}_objflags" Value=)("[0]")( />)
```
und in die untere:

```
$1"1"$3
```
schreiben.

Die [0] habe ich nur in eckige Klammern genommen, um dort evtl. noch andere Zahlenwerte als erlaubt einzutragen.


----------



## bits'bytes (20 Januar 2011)

Hallo Thomas,

vielen Dank - langsam wirds etwas klarer und habs mittlerweile auch hinbekommen, z.B.


(<Parameter ID="p60[0-f]{2}_objflags" Value=)("1")( />)

$1"0"$3

Sehr verwirrend aber cool 

mercy & bg
bb


----------

