Regex zur Suche von "value-losen" Attributen in HTML Tags

Status
Nicht offen für weitere Antworten.

faetzminator

Gesperrter Benutzer
Hallo zusammen,

Ich suche in XHTML (JSP) Dateien illegale, "alte" HTML Tag Attribute, welche nicht geschlossen werden, als Beispiel
Code:
<input type="checkbox" checked/>
nun schrieb ich folgende Regex zum Erkennen dieser (gesplittet zum vereinfachten Erklären?:
Code:
<[a-zA-Z0-9:]+[ \\t\\n]+                                      // matcht '<jsp:some '
([a-zA-Z0-9]*([ \\t\\n]*=[ \\t\\n]*\"[^\"]*\")?[ \\t\\n]+)*?  // matcht alle Attribute vor dem gesuchten
([a-zA-Z0-9]+)                                                // matcht das gesuchte Attribut
([ \\t\\n]+[a-zA-Z0-9]*([ \\t\\n]*=[ \\t\\n]*\"[^\"]*\")?)*   // matcht alle Attribute nach dem gesuchten
[ \\t\\n]*/?>                                                 // matcht ' />'
Nun, die Problematik ist, dass wenn ich im "2. Teil" des Regex das ? weglasse, findet er nur das letzte und ansonsten nur das erste Attribut. Ich gehe davon aus, dass Tags mehrere fehlerhafte Attribute haben.
Wie kann ich das Problem lösen?

Gruss, faetzminator
 
B

bygones

Gast
Hallo zusammen,

Ich suche in XHTML (JSP) Dateien illegale, "alte" HTML Tag Attribute, welche nicht geschlossen werden, als Beispiel
Code:
<input type="checkbox" checked/>
input ist doch damit geschlossen... ich haette jetzt sowas wie
Code:
<br>
vermutet ?
 

faetzminator

Gesperrter Benutzer
ich will im Dokument alle illegalen Attribute ersetzen, z.B. sollte aus meinem Beispiel folgendes werden
Code:
<input type="checkbox" checked="checked"/>
 

faetzminator

Gesperrter Benutzer
Hab die Regex noch ein Bisschen angepasst, zur Veranschaulichung:
Java:
public class Reg {

    public static String reg(String string) {
        String ret = string;
        while (!(ret = reg_(string)).equals(string)) {
            string = ret;
        }
        return ret;
    }

    public static String reg_(String string) {
        return string.replaceAll("(<[\\d\\w:]+\\s+([\\d\\w]*(\\s*=\\s*\"[^\"]*\")?\\s+)*?)([\\d\\w]+)((\\s+[\\d\\w]*(\\s*=\\s*\"[^\"]*\")?)*\\s*/?>)", "$1$4=\"$4\"$5");
    }
}
mit reg() kann ich das Problem von reg_() umgehen, ist aber mühsam, langsam und unschön.
Hier die JUnit Klasse dazu (mit jenem Testcase, welches fehlschlägt):
Java:
import junit.framework.TestCase;

public class RegTest extends TestCase {

    public void testReg() {
        String str1 = "<foo otherfoo test=\"i am word odr not\" kekeke bar=\"baz\" word other=\"other\" other/>";
        String str2 = "<foo otherfoo=\"otherfoo\" test=\"i am word odr not\" kekeke=\"kekeke\" bar=\"baz\" word=\"word\" other=\"other\" other=\"other\"/>";
        assertEquals(str2, Reg.reg(str1));
        assertEquals(str2, Reg.reg_(str1));
    }
}
 

faetzminator

Gesperrter Benutzer
Nun habe ich Probleme mit dem replaceAll(), wenn ich z.B.
Java:
"<uw:lookup beanName=\"__JSpAlLoCAtiON-REPLACESIGN\"           model=\"__JSpAlLoCAtiON-REPLACESIGN\"           id=\"__JSpAlLoCAtiON-REPLACESIGN\"           labelCancelKey=\"__JSpAlLoCAtiON-REPLACESIGN\"           labelConfirmKey=\"__JSpAlLoCAtiON-REPLACESIGN\"           titleKey=\"__JSpAlLoCAtiON-REPLACESIGN\"           name=\"__JSpAlLoCAtiON-REPLACESIGN\"           onselection=\"__JSpAlLoCAtiON-REPLACESIGN\"/>"
übergebe. Er hängt irgendwie irgendwo rekursiv fest:
Code:
[hier noch 100, 200 Stacktraceeinträge von Pattern$*]
Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4022	
Pattern$Loop.matchInit(Matcher, int, CharSequence) line: 4168	
Pattern$Prolog.match(Matcher, int, CharSequence) line: 4105	
Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 3725	
Pattern$Curly.match(Matcher, int, CharSequence) line: 3680	
Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 3718	
Pattern$Curly.match(Matcher, int, CharSequence) line: 3680	
Pattern$Single.match(Matcher, int, CharSequence) line: 3053	
Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4022	
Pattern$Start.match(Matcher, int, CharSequence) line: 2855	
Matcher.find(int, int) line: 736	
Matcher.find() line: 428	
Matcher.replaceAll(String) line: 671	
String.replaceAll(String, String) line: 1340	
Reg.reg_(String) line: 12	
Reg.reg(String) line: 5	
RegTest.testReg() line: 44	
[hier noch die JUnit Calls]
Habe ich den Regex irgendwie "illegal" geschrieben, also was verbotenes gemacht?
 

faetzminator

Gesperrter Benutzer
Hab den Regex nochmals angeschaut und stellte fest, dass ich versehentlich zwei Mal auf [\\d\\w]* statt [\\d\\w]+ matchte. Irgendwie löste dies gleich auch mein Rekursionsproblem :) Nur die while-Schleife brauch ich immer noch, aber mit dem kann ich leben.
Java:
"(<[\\d\\w:]+\\s+([\\d\\w]+(\\s*=\\s*\"[^\"]*\")?\\s+)*?)([\\d\\w]+)((\\s+[\\d\\w]+(\\s*=\\s*\"[^\"]*\")?)*\\s*/?>)"

Gruss, faetzminator
 
B

bygones

Gast
Hab den Regex nochmals angeschaut und stellte fest, dass ich versehentlich zwei Mal auf [\\d\\w]* statt [\\d\\w]+ matchte. Irgendwie löste dies gleich auch mein Rekursionsproblem :) Nur die while-Schleife brauch ich immer noch, aber mit dem kann ich leben.
Java:
"(<[\\d\\w:]+\\s+([\\d\\w]+(\\s*=\\s*\"[^\"]*\")?\\s+)*?)([\\d\\w]+)((\\s+[\\d\\w]+(\\s*=\\s*\"[^\"]*\")?)*\\s*/?>)"

Gruss, faetzminator
na dann hoff ich mal dass du das nie debuggen oder refactoren musst... bei dem regex
 

faetzminator

Gesperrter Benutzer
Wenn du dir meinen ersten Post ansiehst, siehst du, dass er eigentlich ganz einfach und logisch aufgebaut ist ;) Aber klar - das ist natürlich ein Nachteil von Regex.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Regex-Suche nach Worten Allgemeine Java-Themen 3
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
V Suche RegEx zu (gelöstem) Problem Allgemeine Java-Themen 3
H Frage regex greater than less than Allgemeine Java-Themen 7
N Regex schlägt nicht an Allgemeine Java-Themen 10
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
T regex case insensitive trimmed Allgemeine Java-Themen 6
S Zeichen | in regex Allgemeine Java-Themen 8
X Regex mit mehreren Bedingungen machen Allgemeine Java-Themen 5
N Hilfe bei RegEx benötigt Allgemeine Java-Themen 3
C Java17 und Regex Allgemeine Java-Themen 13
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
N Gierigen Regex in nicht-gierigen umwandeln Allgemeine Java-Themen 4
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
OnDemand Regex von bis Allgemeine Java-Themen 6
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
G Regex Allgemeine Java-Themen 2
L regex ganzer string? Allgemeine Java-Themen 2
MiMa Geldbetrag mit regex ermitteln. Allgemeine Java-Themen 14
W RegEx Stringliteral finden - Jflex Allgemeine Java-Themen 5
D Regex Probleme Allgemeine Java-Themen 2
Kirby.exe Regex charakter ignorieren Allgemeine Java-Themen 12
S Java SAT (Haltbarkeitsproblem) mit Regex Allgemeine Java-Themen 6
S [Regex] Nur diese Zeichen beachten Allgemeine Java-Themen 1
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
S Regex mit UND-Verknüpfung Allgemeine Java-Themen 1
P RegEx für Zeiten Allgemeine Java-Themen 7
D Regex: Komplettes Wort bekommen Allgemeine Java-Themen 3
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P RegEx Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
Y regex | n-faches Vorkommen oder gar keins Allgemeine Java-Themen 6
turmaline Regex gegen Regex prüfen Allgemeine Java-Themen 4
HarleyDavidson Regex - Optimierung Allgemeine Java-Themen 4
M Regex für Zahleneingabe in JavaFX Textfield Allgemeine Java-Themen 18
T Best Practice Wortregeln RegEx Allgemeine Java-Themen 11
A ALTER TABLE mit Hilfe von RegEx zerlegen, splitten Allgemeine Java-Themen 5
H Interpreter-Fehler Regex kompiliert nicht Allgemeine Java-Themen 5
M RegEx alle Matches ausgeben Allgemeine Java-Themen 5
Iron Monkey Mit Regex nach Beträge suchen Allgemeine Java-Themen 4
T REGEX Erklaerung Allgemeine Java-Themen 14
T Nur innerhalb des regex-Match ersetzen Allgemeine Java-Themen 9
H Pic Download / Regex Problem Allgemeine Java-Themen 7
F Frage zu Regex möglich Allgemeine Java-Themen 4
M Regex... mal wieder Allgemeine Java-Themen 3
H RegEx - Ersetze alles bis Leerzeichen Allgemeine Java-Themen 5
S regex verbrät CPU Allgemeine Java-Themen 6
V Regex Bereichs Filter Allgemeine Java-Themen 4
127.0.0.1 RegEx _ und 0-9 Allgemeine Java-Themen 45
S Entfernen von allen Nicht-Buchstaben chars aus einem String ohne Regex..? Allgemeine Java-Themen 10
P Java String Regex Allgemeine Java-Themen 2
AyKay Regex XPath Allgemeine Java-Themen 4
C Regex (Case insensitive und Umlaute) Allgemeine Java-Themen 4
D Regex Raute erkennen Allgemeine Java-Themen 2
nrg Zweistelligen Zahlenbereich mit RegEx Allgemeine Java-Themen 8
GilbertGrape Regex-Problem Allgemeine Java-Themen 2
W Denkblockade RegEx Allgemeine Java-Themen 2
S eigene regEx schreiben Allgemeine Java-Themen 4
C Regex expandieren Allgemeine Java-Themen 6
C Regex Überschniedung von Ausdrücken Allgemeine Java-Themen 16
reibi RegEX - Teilstring Allgemeine Java-Themen 6
R Java-RegEx terminiert nicht Allgemeine Java-Themen 3
M Regex: Ich stehe auf dem Schlauch Allgemeine Java-Themen 2
V Kleines Regex-Problem Allgemeine Java-Themen 3
B Regex "Problem" Allgemeine Java-Themen 4
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
J Regex: Fertige URLS aus Javascript Allgemeine Java-Themen 3
N Java regex Allgemeine Java-Themen 5
K Regex JSON Allgemeine Java-Themen 3
J RegEx Ausdruck Allgemeine Java-Themen 2
J Regex: URLS aus CSS Allgemeine Java-Themen 2
G RegEx- Ausdruck Allgemeine Java-Themen 4
G RegEx kein Unterstrich Allgemeine Java-Themen 2
A Text via RegEx durchsuchen und teile ersetzten Allgemeine Java-Themen 5
C Regex: Zahl ohne führende Null Allgemeine Java-Themen 13
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
X Java String Regex - Sonderzeichen Filtern Allgemeine Java-Themen 5
S Dateiname mit Regex parsen Allgemeine Java-Themen 3
Loyd Noch ne Regex-Frage: Verschachtelte Ausdrücke Allgemeine Java-Themen 4
R Java Regex Frage Allgemeine Java-Themen 17
Daniel_L RegEx-Frage: Ersetzen in UBB ausschließen Allgemeine Java-Themen 2
M Große Datei mit Regex durchsuchen Allgemeine Java-Themen 4
S regex für einen Link Allgemeine Java-Themen 3
E Regex alles nach ? löschen Allgemeine Java-Themen 4
M RegEx-Frage Allgemeine Java-Themen 2
R Regex Tokenizer Allgemeine Java-Themen 11
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
H RegEX und eMail Allgemeine Java-Themen 4
L-ectron-X Regex zum Entfernen von mehrzeiligen Kommentaren Allgemeine Java-Themen 2
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
nrg Kleine Hilfe mit RegEx Allgemeine Java-Themen 2
B Regex-Fehler nach lib-Update Allgemeine Java-Themen 2
K Contrains oder Regex Allgemeine Java-Themen 3
J replaceAll , "[", "]" & regex Allgemeine Java-Themen 12
P RegEx und $-Zeichen als Literal Allgemeine Java-Themen 5
P RegEx - Worte ausschließen Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben