AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[TPerlRegEx] Binary Replace

Ein Thema von Win32.API · begonnen am 26. Jul 2010 · letzter Beitrag vom 27. Jul 2010
Antwort Antwort
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#1

[TPerlRegEx] Binary Replace

  Alt 26. Jul 2010, 18:48
Hallo,

ist es möglich mit TPerlRegEx binäre Daten zu ersetzen? Konkret sollte das etwa so aussehen.
Delphi-Quellcode:
    with TPerlRegEx.Create(nil) do
    try
      Subject := BINAERE_DATEN;
      RegEx := '\x01\x02';
      Replacement := '\x03\x04';
      Replace();
    finally
      Free;
    end;
Es soll #01#02 durch #03#04 ersetzen, leider wird #01#02 durch '\x03\x04' ersetzt.

Grüße,
Win32.API

//Edit: War mir ganz unsicher, in welches Forum ich das Posten soll. Vielleicht ist es in "Sonstige Fragen zu Delphi" besser aufgehoben.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

AW: [TPerlRegEx] Binary Replace

  Alt 26. Jul 2010, 19:07
Delphi-Quellcode:
RegEx := '\x01\x02';
Replacement := #3#4;
Die Expression muß schon den RegExp-Regeln entsprechen, aber im Replacement muß der gewünschte Text direkt drinstehn, da dort natürlich nicht die Expression-Regeln gelten.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#3

AW: [TPerlRegEx] Binary Replace

  Alt 26. Jul 2010, 20:28
Ah, ok, danke Dir für die Antwort. Gibt es eine Möglichkeit das Replacement auch in RegEx-Syntax anzugeben? Um einen Einheitlichen Standard zu schaffen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

AW: [TPerlRegEx] Binary Replace

  Alt 26. Jul 2010, 20:55
mit Boardmitteln ... nein

du müßtest dir also selber einen Converter schreiben,
wobei man hierbei notfalls auch wieder 'nen RegEx-Replace nutzen könnte.

Deine Lib bietet doch eine Möglichkeit über 'ne Callbackfunktion den Repleace durchzuführen?
z.B. für diese "Chars" nach '\\x\x{1,2}' suchen, in dem Callback den Hex-Anteil in ein Char übersetzen.

Aber danke für den Tipp (schreibe ja nebenbei noch eine "fast fertige" RegEx-Lib) und da könnte ich soeinen Converter leicht mit integrieren
(bin aber aktuell noch mit was Anderem beschäftigt und erst danach kann ich mich wieder darum kümmern )
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#5

AW: [TPerlRegEx] Binary Replace

  Alt 27. Jul 2010, 09:33
Deine Lib bietet doch eine Möglichkeit über 'ne Callbackfunktion den Repleace durchzuführen?
z.B. für diese "Chars" nach '\\x\x{1,2}' suchen, in dem Callback den Hex-Anteil in ein Char übersetzen.
Danke für die Antwort, aber sollte die Expression nicht eher so aussehen: \\x([0-9a-fA-F]{1,2}) , wobei man an dieser Stelle noch auf das Escapen aufpassen müsste.

Grüße,
Win32.API
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#6

AW: [TPerlRegEx] Binary Replace

  Alt 27. Jul 2010, 09:43
ups, jetzt hab'sch mich tatsächlich verlaufen

OK, dann halt \p{IsXDigit} (nach Perl) sowie [[:xdigit:]] (nach POSIX) oder eben [0-9A-Fa-f] .

k.A. ob's so auch noch läuft '(?=(\\\\|[^\\]\\\\|[^\\]|^))\\x[0-9A-Fa-f]{1,2}' . oder vielleicht einfach nur '(?!\\)\\x[0-9A-Fa-f]{1,2}' alle Escapesequenzen davor auszuwerten, via 'ner RegExp, ist nun och nicht so einfach/möglich.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Jul 2010 um 10:07 Uhr)
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#7

AW: [TPerlRegEx] Binary Replace

  Alt 27. Jul 2010, 10:47
Habe nochmal ein wenig in den Perl-Docks gestöbert: \x gibt's nicht dafür aber \X, welches genau das macht.

Und das escapen sollte doch mit einer einfachen negative look behind expression ala (?<!\\)\\x\X{1,2} funktionieren.

Grüße,
Win32.API
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#8

AW: [TPerlRegEx] Binary Replace

  Alt 27. Jul 2010, 10:56
hab'sch mich also doch nicht total falsch verlaufen
Und das escapen sollte doch mit einer einfachen negative look behind expression ala (?<!\\)\\x\X{1,2} funktionieren.
'abc\x12' .. 'a b c \x12' geht
'abc\\x12' .. 'a b c \\ x 1 2' geht
'abc\\\x12' .. 'a b c \\ \x12' geht nicht
'abc\\\\x12' .. 'a b c \\ \\ x 1 2' geht
also oftmals könnte es funktionieren ... muß es aber nicht
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#9

AW: [TPerlRegEx] Binary Replace

  Alt 27. Jul 2010, 11:12
'abc\x12' .. 'a b c \x12' geht
'abc\\x12' .. 'a b c \\ x 1 2' geht
'abc\\\x12' .. 'a b c \\ \x12' geht nicht
'abc\\\\x12' .. 'a b c \\ \\ x 1 2' geht
also oftmals könnte es funktionieren ... muß es aber nicht
Ist doch schon mal ein Anfang

Ich glaube es wird auch schwer, dass mit einer RegEx Expression zu lösen.

Wenn dann müsste jeder Slash escapt werden. Also wird '\\' zu '\' und '\' zu ''.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#10

AW: [TPerlRegEx] Binary Replace

  Alt 27. Jul 2010, 11:31
eventuell so
wenn keine ungerade Anzahl an \ davor liegt, dann umwandeln
'(?!([^\\]|^)\\(\\\\)*)\\x[0-9A-Fa-f]{1,2}'
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz