![]() |
TRegex.Replace Windows vs Android
Ich habe folgendes Problem
Delphi-Quellcode:
Das Windows Verhalten ist das was ich mir wünsche.
Function RemoveNonHex(aValue:String):String;
var aRegEx:TRegex; Begin aRegEx := TRegEx.Create('[^A-F0-9]'); Result := aRegEx.Replace(aValue,''); End; //Unter Windows ausgeführt RemoveNonHex('04-29-14-CA')// = '042914CA' //Unter Android ausgeführt RemoveNonHex('04-29-14-CA')// = '04' Warum bekomme ich das unter Android nicht? Liegt es daran das '' in Android ein Nullterminierter String ist und er quasi über all '\u0000' einsetzt? |
AW: TRegex.Replace Windows vs Android
.. wie schaut denn die Ausgabe aus, wenn Du direkt aValue ausgibts?
oder wenn Du aRegEx.replace durch replaceStr ersetzt? Grüße Klaus |
AW: TRegex.Replace Windows vs Android
Wenn ich direct aValue ausgebe sieht die Ausgabe aus wie erwartet.
ReplaceStr würde ich nicht benutzen wegen der verschiedenen Stringarten und TStringhelper.Replace Ist keine Hilfe, weil ich ja Zeichen für Zeichen entscheiden muss. Daher ja die Regex. Ich habe es jetzt mit nem Positiven Matching gelöst und ich hänge dann alle Matches aneinander zu einem String... Diese Lösung funktioniert, weil ich Hexzahlenpaare vorraussetzen kann.
Delphi-Quellcode:
Eine allgemeine Lösung wäre wohl dies hier
Function RemoveNonHex(aValue:String):String;
var matches:TmatchCollection; aMatch:TMatch; Begin Result := ''; matches := TRegEx.Matches(aValue,'[A-F0-9][A-F0-9]'); for aMatch in matches do if aMatch.success then Result := Result + aMatch.Value; End;
Delphi-Quellcode:
Absolut dämlich das TRegEx.Replace nicht in Android geht
Function RemoveNonHex(aValue:String):String;
var matches:TmatchCollection; aMatch:TMatch; Begin Result := ''; matches := TRegEx.Matches(aValue,'[A-F0-9]'); for aMatch in matches do if aMatch.success then Result := Result + aMatch.Value; End; |
AW: TRegex.Replace Windows vs Android
Also wenn, dann ist das ja ein Bug und den solltest du mal im QC melden.
Egal welches OS ... es sollte überall gleich sein. Bzw. mal in aktuellerem Delphi probieren, ob das nicht schon behoben wurde. @QuickAndDirty: Wenn ich bei RegEx am Ende eh alles selber machen würde, dann liese ich das RegEx weg und mach auch noch Suche/Verlgeich selber. |
AW: TRegex.Replace Windows vs Android
Beim Test auf
![]() |
AW: TRegex.Replace Windows vs Android
Zitat:
Zitat:
Zitat:
Und Regexen gibts ja nicht erst seit gestern...in privaten Projekten (also ohne Delphi) funktionieren die ja auch ganz gut. Und jetzt ist es halt fertig... Vielleicht funktionieren die in zukunft auf Android. |
AW: TRegex.Replace Windows vs Android
Zitat:
Kann ja sein dass die Defaults auf den Betriebssystemen unterscheidlich sind. Text=04-29-14-CA RegEx=[^A-F0-9] Ergebnisse: Mit globalflag mit javascript engine 042914CA Ohne globalflag mit javascript engine 0429-14-CA Ohne globalflag mit Perl engine 042914CA mit Delphi engine auf windows 042914CA mit Delphi engine auf Android 04 |
AW: TRegex.Replace Windows vs Android
Dieses Flag gibt es bei der Delphi-Implementierung wohl nicht. Möglichweise, wenn man den Count hochsetzt.
|
AW: TRegex.Replace Windows vs Android
Zitat:
Mavarik |
AW: TRegex.Replace Windows vs Android
Wenn 2 Plattformen verscheidene Ergebnisse liefern würde ich das auf jeden Fall als Fehler ansehen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz