Pattern eines Textes

Status
Nicht offen für weitere Antworten.

jensa

Aktives Mitglied
Hallo,
ich habe mir vorgenommen mit regulären Ausdrücken mich zu beschäftigen, jetzt bin cih auf das problem gestoßen wie ich am geschicktesten einen ganzen text parsen kann. aktuell nur das ich ** in respektive umwandel später will ich dies erweitern auf z.b. == soll zu <h1> werden etc sprich Wikisyntax in Html umwandeln hatte ich mir als beispiel genommen jetzt aber das problem das zwar der parser funktioniert er auch die ausdrücke findet jedoch entfernt er den nicht zutreffenden text komplett anstatt ihn stehen zu lassen.


Code:
public static String RegEx(String input) {

		String str,replacefirst, replacelast,output;
		Pattern p;
		Matcher m;

		output = null;
		str = input;
		p = Pattern.compile("[^*]*[**]{2}([a-zA-Z]+)[**]{2}[^*]*");
		m = p.matcher(str);
		replacefirst = "[b]";
		replacelast = "[/b]";
		while (m.find()) {
			output = replacefirst + m.group(1) + replacelast;
		}
	return output;
	}

Input ist z.B:
hallo **Jens**
wie geht es **dir**?


output sollte dann eben sein
hallo Jens
wie geht es dir?

leider ist aktuell der output:

wie kann ich nun machen das nicht treffer wo auch kein **text** halt einfach vorgehangen & wieder angehängt werden könnte?

Besten Dank für eure Hilfe im Vorraus,

Gruß jensa
 
S

SlaterB

Gast
in deiner Schleife überschreibst du jeweils den vorherigen Output,
an die Zwischenstrings zu kommen ist aber eh die schwierigere Aufgabe

da musst du eigentlich erstmal ne Menge über reguläre Ausdrücke lernen,
hier ein modifiziertes Beispiel von
http://java.sun.com/javase/6/docs/api/java/util/regex/Matcher.html

Code:
public class Test
{
    public static void main(String[] args)
    {
        Pattern p = Pattern.compile("(c)(a+)(t)");
        Matcher m = p.matcher("one cat two caaaats in the yard");
        StringBuffer sb = new StringBuffer();
        while (m.find())
        {
            m.appendReplacement(sb, "XY$2YZ");
        }
        m.appendTail(sb);
        System.out.println(sb.toString());
    }
}
beachte die () im Pattern, die referenzierbare Gruppen darstellen,
$2 in der Schleife steht für die (a+)-Gruppe zwischen den zu ersetzenden Anfang + Ende
 

Wildcard

Top Contributor
Grundsätzlich geht das mit replaceAll und Capturing Groups (in replaceAll mit $1 - $n zugreifbar).
Parser schreibt man allerdings besser nicht mit RegEx, das ist zu kompliziert und Fehleranfällig.
Schau dir mal Parser Generatoren wie AntLR an.
 

jensa

Aktives Mitglied
hallo,
das tool sieht interessant aus,
wie gesagt war halt primär den übungszwecken gedacht diese aufgabe, kam auf diese Idee nach einem Beitrag in einem Blog der Sich rund um das Pattern beschäftigt hatte.
funktioniert jetzt bestens.

Code:
	public static String RegEx(String input) {

		String str,output;
		Pattern p;
		Matcher m;

		output = null;
		str = input;
		p = Pattern.compile("[**]{2}([a-zA-Z]+)[**]{2}");
		m = p.matcher(str);
		StringBuffer sb = new StringBuffer();
		while (m.find()) {
			m.appendReplacement(sb, "
$1</br>");
		}
		m.appendTail(sb);
        System.out.println(sb.toString());
		output = sb.toString();
	return output;
	}
 
S

SlaterB

Gast
replaceAll ist aber wirklich kürzer:

Code:
public class Test
{
    public static void main(String[] args)
    {
        String str = "hallo **Jens**         wie geht es **dir**?";
        str = str.replaceAll("[**]{2}([a-zA-Z]+)[**]{2}", "
$1</br>");
        System.out.println(str);
    }
}

verwendet übrigens intern genau diesen Code,
Matcher:

Code:
/**
     * Replaces every subsequence of the input sequence that matches the
     * pattern with the given replacement string.
     *
     * 

 This method first resets this matcher.  It then scans the input
     * sequence looking for matches of the pattern.  Characters that are not
     * part of any match are appended directly to the result string; each match
     * is replaced in the result by the replacement string.  The replacement
     * string may contain references to captured subsequences as in the {@link
     * #appendReplacement appendReplacement} method.
     *
     * 

 Note that backslashes (<tt>\</tt>) and dollar signs (<tt>$</tt>) in
     * the replacement string may cause the results to be different than if it
     * were being treated as a literal replacement string. Dollar signs may be
     * treated as references to captured subsequences as described above, and
     * backslashes are used to escape literal characters in the replacement
     * string.
     *
     * 

 Given the regular expression <tt>a*b</tt>, the input
     * <tt>"aabfooaabfooabfoob"</tt>, and the replacement string
     * <tt>"-"</tt>, an invocation of this method on a matcher for that
     * expression would yield the string <tt>"-foo-foo-foo-"</tt>.
     *
     * 

 Invoking this method changes this matcher's state.  If the matcher
     * is to be used in further matching operations then it should first be
     * reset.  </p>
     *
     * @param  replacement
     *         The replacement string
     *
     * @return  The string constructed by replacing each matching subsequence
     *          by the replacement string, substituting captured subsequences
     *          as needed
     */
    public String replaceAll(String replacement) {
        reset();
        boolean result = find();
        if (result) {
            StringBuffer sb = new StringBuffer();
            do {
                appendReplacement(sb, replacement);
                result = find();
            } while (result);
            appendTail(sb);
            return sb.toString();
        }
        return text.toString();
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
mihe7 equals und instanceOf pattern matching Allgemeine Java-Themen 7
L Pattern Eventhandler Allgemeine Java-Themen 5
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Z MVC Pattern - sinnvolle Integration Allgemeine Java-Themen 6
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
Kirby.exe Filename nach bestimmtem Pattern durchsuchen Allgemeine Java-Themen 5
Meeresgott Best Practice "Spezifisches" Factory Pattern ? Allgemeine Java-Themen 1
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
M Vaadin MVP Pattern Allgemeine Java-Themen 1
N Java MVC Pattern richtig anwenden Allgemeine Java-Themen 24
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
K Factory Pattern: Mit Generics umgehen Allgemeine Java-Themen 6
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
B MVC-Pattern größeres Beispiel Allgemeine Java-Themen 16
GreenTeaYT Verstehe nicht ganz das Observer Pattern in einer Arrayliste? Allgemeine Java-Themen 3
L Erste Schritte Java Date Format Pattern bestimmten Allgemeine Java-Themen 2
D Pattern mit Pattern vergleichen Allgemeine Java-Themen 3
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
S Hilfe bei geeignetem Pattern (Decorierer) Allgemeine Java-Themen 2
F Welches Design Pattern? Allgemeine Java-Themen 3
J Pattern aus String entfernen Allgemeine Java-Themen 2
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
Rudolf State Pattern als Enum? Allgemeine Java-Themen 10
M massenhaft verschiedene Date-Pattern Allgemeine Java-Themen 3
Guybrush Threepwood Pattern gesucht: Punkt ohne Leerzeichen dahinter Allgemeine Java-Themen 3
turmaline OOP Decorater Pattern für Varifikationsverhalten Allgemeine Java-Themen 13
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
X Datentypen Prozentualer Abgleich zwischen 2 Strings (Pattern?) Allgemeine Java-Themen 3
H Pattern.compile Syntax Allgemeine Java-Themen 15
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
T Pattern für Benutzer-Gruppen, RMI Allgemeine Java-Themen 5
E Super erzwingen, konzept/pattern gesucht. Allgemeine Java-Themen 8
H Problem mit der Klasse Pattern - Regulärer Ausdruck Allgemeine Java-Themen 2
Eldorado Meinung zu einem abgewandelten MVC-Pattern Allgemeine Java-Themen 2
R Matcher - Pattern mit belibigem Anfang Allgemeine Java-Themen 2
H Bestimmten String mit Pattern und Matcher herauslesen => kein erfolg Allgemeine Java-Themen 9
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
I Template Method pattern mit "geschützten Methoden" Allgemeine Java-Themen 5
T Pattern: Passive View Allgemeine Java-Themen 2
K Verständnisprobleme bei Observer-Pattern mit größerem Datenmodell Allgemeine Java-Themen 32
T Pattern: Greedy, Reluctant, Possessive Allgemeine Java-Themen 4
S Hilfe bei Pattern Allgemeine Java-Themen 5
N Registry Pattern Allgemeine Java-Themen 7
Tandibur Denkfehler bei Pattern.matches? Allgemeine Java-Themen 3
Tandibur pattern dynamisch vorkompilieren Allgemeine Java-Themen 9
A Observer Pattern: feuern bei neuer Referenz-Zuweisung? Allgemeine Java-Themen 8
N Pattern Allgemeine Java-Themen 11
Iron Monkey Pattern - Matcher - Problem Allgemeine Java-Themen 3
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
G Accordion Design Pattern Frage Allgemeine Java-Themen 2
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
U Verständnisschwierigkeiten Observer Pattern Allgemeine Java-Themen 18
H2SO3- String(pattern) von SimpleDateFormat auslesen Allgemeine Java-Themen 7
M Problem mit Pattern Allgemeine Java-Themen 3
N Welches design pattern? Allgemeine Java-Themen 8
B Pattern gesucht, Programm Optionen, Casten vermeiden Allgemeine Java-Themen 3
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
G Sequenzdiagramm Dao Pattern Allgemeine Java-Themen 3
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
S regex-Pattern Ausdruck negieren Allgemeine Java-Themen 2
M Java Garbage Collector Frage (Singleton Pattern) Allgemeine Java-Themen 13
Y Pattern Problem Allgemeine Java-Themen 2
G UML-Diagramme mit DAO Pattern Allgemeine Java-Themen 7
S Pattern regex Allgemeine Java-Themen 2
G Composite, Design Pattern, printTree Allgemeine Java-Themen 42
J Regex Pattern Problem Allgemeine Java-Themen 12
P MVC Pattern Allgemeine Java-Themen 31
C Pattern für Kommunikation gesucht Allgemeine Java-Themen 3
G Frage zu MVC Pattern Allgemeine Java-Themen 6
J Pattern und Regex Allgemeine Java-Themen 2
L Wie Pattern anwenden um Cipher zu nutzen Allgemeine Java-Themen 2
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
F Typüberprüfung in Superklasse - geeignetes Pattern? Allgemeine Java-Themen 11
M Java Pattern hilfe Allgemeine Java-Themen 6
N Observer Pattern Allgemeine Java-Themen 2
G Problem mit MVC-Pattern (Controller als anonyme Unterklasse) Allgemeine Java-Themen 2
F Design Pattern zur Realisierung von Mehrfachvererbung? Allgemeine Java-Themen 8
M Pattern aus Properties Allgemeine Java-Themen 3
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
G mit Pattern strings filtern ein kleines problemchen ;) Allgemeine Java-Themen 2
M nach einem Pattern splitten Allgemeine Java-Themen 2
F Composite Pattern in Java? Allgemeine Java-Themen 1
G problem mit dem observer pattern Allgemeine Java-Themen 3
C Matcher/Pattern ersetzten für JDK 1.3 Allgemeine Java-Themen 2
M Pattern: Summary of regex constructs: Backslash Allgemeine Java-Themen 2
G Scanner und Abbruchbedingung/Pattern Allgemeine Java-Themen 2
F suche im Classpath mit Pattern *.gif Allgemeine Java-Themen 16
G Frage zum Observer Pattern Allgemeine Java-Themen 4
D Design Pattern: Singleton Allgemeine Java-Themen 4
M Pattern, Matcher, Split Allgemeine Java-Themen 2
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben