Per Batch Wert aus einem HTML Code auslesen?

Hallo liebe Community!

Ich habe im Forum schon nach Lösungen gesucht, aber leider nur Bruchstücke der Lösung gefunden.

Ich habe schon mehrere Schritte per Batch realisiert, aber der letzte will mir nicht gelingen:

Ich habe ein Programm, welches in verschiedenen Versionen gestartet werden kann, die Version bestimmt sich nach der jeweiligen Datenbank und -version.

Dafür gibt es eine HTML Übersichtsseite die alle Datenbanken mit allen Versionen abbildet. Diese wird automatisch als Textdatei runtergeladen und aktualisiert.

Nun muss ich aus dem HTML Code die Zeile mit der richtigen Datenbank auslesen und anschließend die Version, die weiter hinten steht.

Beispiel

<tr><td class='subtd'>DB1</td><td class='subtd'><nobr><font color=#fc7f2b><img title='Ich bin eine Datenbank' src='logo_ci.svg' width='14' height='14'> VERSIONSNUMMER</font></nobr> <font color=grey title='Letztes Login (Monat.Jahr) auf dieser Datenbank'>XXX</font> </td></tr>

<tr><td class='subtd'>DB2</td><td class='subtd'><nobr><font color=#fc7f2b><img title='Ich bin eine Datenbank' src='logo_ci.svg' width='14' height='14'> VERSIONSNUMMER</font></nobr> <font color=grey title='Letztes Login (Monat.Jahr) auf dieser Datenbank'>XXX</font> </td></tr>

HINWEIS die Versionsnummer ist immer gleich aufgebaut, aber unterschiedlich lang XX.X.XXX ODER X.XX.XXXX

Ich würde mich riesig über eine Erklärung zur Lösung freuen, weil ich was dazu lernen möchte.

Computer, programmieren, Batch, cmd, PowerShell, Regulärer Ausdruck
[JavaFX] Spinner so einstellen, dass er nicht leer bleiben darf?

Wenn ich einen IntegerSpinner leer lasse und das Feld verlasse, bekomme ich eine NullPointerException, da logischer Weise nichts im Spinner steht.

Ich möchte den Spinner so einstellen, dass er mindestens eine Zahl beinhalten muss und maximal zweistellig sein darf. Ich meine damit nicht den Mindest- oder Maximalwert. Beispiel:

""    - leer;                 so ists falsch
"1"   - nicht leer;           so ists richtig
"11"  - nicht leer;           so ists richtig
"111" - mehr als zwei Zahlen; so ists falsch

Ich hatte schon mal sehr lange dieses Problem.

Nun möchte ich entweder auch eine eigene Fehlermeldung für diese NullPointerException haben (um z. B. .requestFocus() zu machen) oder einfach die Eingaben blockieren, wenn es, wie oben beschrieben, falsch gemacht wurde.

Mit regex kann ich schon mal einstellen, dass der Spinner eine rote Farbe bekommt (als Hinweis), wenn ein non-Integer eingegeben wurde oder zu wenige bzw. zu viele Zahlen eingegeben wurden:

if (!options_Spinner_StartInterval_seconds.getEditor().getText().matches("^-?\\d+$") || !options_Spinner_StartInterval_seconds.getEditor().getText().matches("^-?\\d.{0,2}$"))
    options_Spinner_StartInterval_seconds.setStyle("-fx-focus-color: #f00;");

Wenn ich aber die Anzahl der Zahlen im Spinner überprüfe, kann ich kein

spinner.requestFocus();

machen - ich kann den Spinner trotzdem verlassen.

Computer, programmieren, Java, JavaFX, Regulärer Ausdruck
Reguläre Grammatik vs regulärer Ausdruck?

Hallo,

ich arbeite gerade das Buch Compiler Engineering von Cooper durch und habe schon mehrere Fragen dazu. Vllt gibt es ja einen ITler, der mir helfen kann.

Im zweiten Kapitel habe ich reguläre Ausdrücke kennengelernt, mit welcher man eine reguläre Sprache beschreiben kann.

Der Scanner erzeugt also Wörter, die an den Parser weitergegeben werden.

Frage 1: Jetzt arbeitet der Parser mit einer regulären Grammatik, um eine Syntaxanalyse durchzuführen. Zu Beginn dachte ich, bei den Terminalen handelt es sich um Wörter aus der Sprache, aber wenn ich es jetzt richig verstehe, sind Terminale Zeichen aus dem Alphabet, über welchem die Sprache gebildet wird.

Wie erzeugt der Parser daraus eine Syntaxprüfung, wenn nicht die Reihenfolge der Wörter, sondern die, der Buchstaben analysiert wird. Sind die Grammatiken denn so komplex, dass die Wortreihenfolge kontrolliert werden kann? Bzw. wieso werden für beide Phasen dann nicht einfach eine Grammatik oder RegExes genutzt, anstatt beides zu definieren?

Frage 2: Ich dachte immer, eine Reg Gram und eine RegEx wären unterschiedliche Dinge. Hier https://de.wikipedia.org/wiki/Regul%C3%A4re_Grammatik#Regul%C3%A4re_Sprachen und im Beitrag unter Regulären Sprachen, wird aber gesagt, dass dies beide äquivalente Konzepte sind.

Was mich daran stört.

Als nicht reguläre Sprache wird häufig die Sprache L = a^n b^n genannt. Mir ist zwar bewusst, dass ich die Sprache nicht durch eine RegEx oder einen Automaten abbilden kann (von denen mir bewusst ist, dass sie äquivalent sind), aber ich könnte doch mit einer Regulären Grammatik bspw. die Ableitungsregel S -> aSb | € (epislon soll das sein :P) erzeugen und hätte damit doch eine Beschreibung für die Sprache.

Wenn RegExes und RegGrams aber äquivalent sind, dann scheine ich ja einen Fehler in der Ableitung zu machen.

Frage 3: Definition Reguläre Sprachen https://de.wikipedia.org/wiki/Regul%C3%A4re_Sprache#Definition

Hier wird beschrieben, dass eine der Bedingungen erfüllt sein muss, damit es sich um eine Reg Sprache handelt. Aber wenn eine Bedingung erfüllt ist, sind nicht gleichzeitig alle Bedingungen erfüllt?

Verwirrt mich alles ziemlich

Mathematik, IT, Informatik, Scanner, Theoretische Informatik, formale Sprachen, Regulärer Ausdruck
Funktionierender regulärer Ausdruck (CMD) um aus einer Textdatei bestimmte Zeilen mit " zu entfernen?

Eigentlich könnte man ja meinen, dass dieses Problem recht leicht zu lösen sein müsste. 

Aber aus irgendwelchen Gründen ist es das nicht, da " irgendwie für alles einen Sonderstatus hat. 

Also was ich gerne wissen würde: 

 Wie bzw. mit welchem regulären Ausdruck kann man (z.b mit einem Grepbefehl?) alle Zeilen suchen, die mit einem " anfangen ohne, dass dies zu unerwarteten Verhalten führt und z.b der Pfad nicht mehr gefunden wird bzw. keine Ausgabedatei erzeugt wird?  

 Ich hab es jetzt bereits mit dutzenden verschiedensten Varianten versucht: grep '^"' grep '^\"' grep -E '^\"' grep '^\".*' 

und noch X weiteren Variationen, aber entweder werden einfach nur alle Zeilen ausgegeben, die irgendwo im Text ein " enthalten oder es gibt Probleme mit der Erzeugung der Ausgabedatei.

Wichtig wäre in diesem Fall jedoch, dass nur der Anfang (erste Charakter) einer Zeile überprüft bzw. gematched werden soll. Scheinbar soll dies bei Grep ja mit ^ möglich sein und ein Escapen der " mit \. Funktioniert aber alles nicht!

GPT hab ich auch schon gefragt, aber der Bot ist mit der Frage komplett überfordert und gibt nur hanebüchenen Mist aus, der entweder nicht funktioniert oder sehr langsam ist (z.b Ansätze mit Powershell)

Also bevor ich jetzt noch meinen kompletten PC / CPU zu Schrott fahre: Gibt es eine effektive und schnelle Möglichkeit wie man diese Operation aus einer Textdatei alle Zeilen ohne " am Anfang = delete (möglichst mit verfügbaren Onboardmitteln) ausführen kann und falls ja wie?  

Im Idealfall sollten die Zeilen, die nicht gematched werden auch einfach direkt aus der Datei herausgelöscht werden können, anstatt jedesmal den kompletten Inhalt zu kopieren.

Irgendein Tipp?

PC, IT, programmieren, Batch, Batchprogrammierung, cmd, Code, Programmiersprache, Textbearbeitung, PowerShell, Regulärer Ausdruck, Windows 10, CMD Befehl