AGB  ·  Datenschutz  ·  Impressum  







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

TRegex.Replace Windows vs Android

Ein Thema von QuickAndDirty · begonnen am 23. Mär 2018 · letzter Beitrag vom 28. Mär 2018
Antwort Antwort
Seite 1 von 2  1 2      
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#1

TRegex.Replace Windows vs Android

  Alt 23. Mär 2018, 15:40
Ich habe folgendes Problem
Delphi-Quellcode:
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'
Das Windows Verhalten ist das was ich mir wünsche.
Warum bekomme ich das unter Android nicht?
Liegt es daran das
'' in Android ein Nullterminierter String ist und er quasi über all '\u0000' einsetzt?
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (23. Mär 2018 um 15:50 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TRegex.Replace Windows vs Android

  Alt 23. Mär 2018, 16:36
.. wie schaut denn die Ausgabe aus, wenn Du direkt aValue ausgibts?
oder wenn Du aRegEx.replace durch replaceStr ersetzt?

Grüße
Klaus
Klaus

Geändert von Klaus01 (23. Mär 2018 um 16:38 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#3

AW: TRegex.Replace Windows vs Android

  Alt 23. Mär 2018, 17:15
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:
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;
Eine allgemeine Lösung wäre wohl dies hier
Delphi-Quellcode:
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;
Absolut dämlich das TRegEx.Replace nicht in Android geht
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (23. Mär 2018 um 17:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: TRegex.Replace Windows vs Android

  Alt 23. Mär 2018, 17:36
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (23. Mär 2018 um 17:39 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TRegex.Replace Windows vs Android

  Alt 23. Mär 2018, 17:44
Beim Test auf https://regexr.com/ entspricht das Verhalten unter Windows dem mit dem flag global und das von Android ohne dieses flag.
Markus Kinzler
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#6

AW: TRegex.Replace Windows vs Android

  Alt 28. Mär 2018, 11:06
Also wenn, dann ist das ja ein Bug und den solltest du mal im QC melden.
Egal welches OS ... es sollte überall gleich sein.
Ich habe keinen direkten zugriff auf GC... müsste mich dazu mit einer vielbeschäftigten person abstimmen...


Bzw. mal in aktuellerem Delphi probieren, ob das nicht schon behoben wurde.
Delphi 10.2 Update 1 ist die version in der das "Problem" auftaucht.


@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.
Ja ich hatte so eine Lösung bereits. Wollte dann eine Sache mit regex machen und dachte dann mache ich doch gleich das ganze Stringprocessing mit regex.
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.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (28. Mär 2018 um 11:08 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#7

AW: TRegex.Replace Windows vs Android

  Alt 28. Mär 2018, 11:10
Beim Test auf https://regexr.com/ entspricht das Verhalten unter Windows dem mit dem flag global und das von Android ohne dieses flag.
Gibts in TRegex ein global flag das sich setzen ließe?
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
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (28. Mär 2018 um 11:23 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TRegex.Replace Windows vs Android

  Alt 28. Mär 2018, 11:14
Dieses Flag gibt es bei der Delphi-Implementierung wohl nicht. Möglichweise, wenn man den Count hochsetzt.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: TRegex.Replace Windows vs Android

  Alt 28. Mär 2018, 11:23
Also wenn, dann ist das ja ein Bug und den solltest du mal im QC melden.
Richtig, wenn es ein Bug ist, sollte dieser natürlich behoben werden! Abgesehen davon, dass ich NIE auf die Idee kommen würde für so etwas RegEx zu nehmen...

Mavarik
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: TRegex.Replace Windows vs Android

  Alt 28. Mär 2018, 11:25
Wenn 2 Plattformen verscheidene Ergebnisse liefern würde ich das auf jeden Fall als Fehler ansehen.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:59 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