# Frage zu Regulärer Ausdruck



## omen (12. Mrz 2012)

Hallo zusammen,

ich möchte in einer Gleichung des Formes " F=A+B+C'+D'+K' ", nach negierten Buchstaben suchen, die als nächstes in NAND umgewandelt werden. Ich habe folgenden Test geschrieben:


```
public class Test {

	public static void main(String[] args){
		// search neg gates and replace to the corresponding NAND A'+B'=>A-NAND-B
		String test="A'+B'd";
		System.out.println(test.replaceAll( "[A-Z]{1}'{1}[\\+[A-Z]{1}'{1}]+","NAND") );
	}
}
```

Der Test findet das Muster und ersetzt es durch "NAND".

Meine Frage: Wie kann ich wissen, ob z.B. A'+B'  oder K'+A' gefunden wurde, damit ich gefundene Buchtabe an NAND anhängen kann?

Beispiel: Wenn A'+B' gefunden wurde, dann soll es durch A-NAND-B ersetzt werden.
            Wenn D'+K' gefunden wurde, dann soll es durch D-NAND-K ersetzt werden.


Hat jemand eine Idee?


----------



## SlaterB (12. Mrz 2012)

dein Ausdruck ist recht wirr, {1} ist doch überflüssig und [c][\\+[A-Z]{1}'{1}]+[/c] ist eine beliebig lange Wiederholung aller Zeichen zwischen den äußeren eckigen Klammern,
oder fast, "A'+{}AAAAAB'd" wird jedenfalls auch erfolgreich ersetzt

hier ne Verbesserung, auch mit deinem anderen Feature, welches in der Tat nicht so leicht zu finden ist

```
public class Test
{

    public static void main(String[] args)
    {
        String test="A'+B'd";
        System.out.println(test.replaceAll( "([A-Z])'\\+([A-Z])'","$1-NAND-$2") );
    }

}
```
die runden Klammern für die Ausdrücke, die mit $ referenziert werden


----------



## omen (12. Mrz 2012)

Hi SlaterB,

danke für deine Antwort. Wie kann ich die Referenzierung variabel beliebig viel machen?

Beispiel: A'+B'+C'+D' => A-NAND-B-C-D
            A'+B+C+D'+K'=>A-NAND-D-K


----------



## SlaterB (12. Mrz 2012)

einzelne Abschnitte kann man ja noch überspringen,
aber beliebig viele Terme einsammeln und einzeln bearbeitet neu zusammenstellen, das übersteigt nun RegEx wahrscheinlich,
zumindest aber meinen Wissensstand dazu,
so kompliziert musst du selber parsen, ich empfehle Überführung in Baumstruktur, siehe etwa

http://www.java-forum.org/allgemeines/12306-parser-fuer-mathematische-formeln.html


----------

