frank
Goto Top

Regular Expressions für unsere Color-Tags: Wer kann es lösen?

Hi,

ich benötige bei unseren Regular Expressions mal etwas Hilfe. Der Color-Code in der Textformatierung funktioniert leider nicht einwandfrei. Evtl findet ihr eine gute Lösung. Hier die Bedingungen:

Der Text:
Dieser ##red|Text ist rot,## aber dieser hier nicht. Jetzt kommt die Raute ############ warum auch immer. Nun noch einmal ein ##green|grüner Text ## und zum Schluss noch eine Raute #. Die Farbe ist evtl aber auch ###ff9933|Text in orange.## Den Text muss keiner Verstehen ##

Hier die aktuelle RegEx Bedingung, die im Beispiel aber nicht funktioniert (ohne die Rauten im Text schon):
/([##]{2}(.+?)\|(.+?)[##]{2})/g

Hier die Seite, um das es zu prüfen: http://www.regexpal.com/

Ziel ist es, nur die beiden Color-Codes als Ergebnis zu bekommen.

Hier ein paar Hilfen zu den Regular Expressions: http://blog.weblogie.de/webentwicklung/merkblatt-regular-expressions/
Hier die PHP Doku zum Befehl, der verwendet wird: http://php.net/manual/en/function.preg-replace.php

Wer hat die Lösung? Er wird natürlich auch in der Release Note dankend erwähnt. Ruhm und Ehre winken!

Gruß
Frank

Content-Key: 298878

Url: https://administrator.de/contentid/298878

Printed on: April 19, 2024 at 00:04 o'clock

Mitglied: 114757
Solution 114757 Mar 11, 2016 updated at 18:12:04 (UTC)
Goto Top
Hi Frank,
/#{2}([a-z]+|#[\da-f]{3,6})\|(.+?)#{2}/gi
um eventuell nicht existierende Farben zusätzlich auszuschließen noch definierter face-wink:
/#{2}((AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGray|DarkGrey|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|Dar###ge|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGray|DarkSlateGrey|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGray|DimGrey|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gray|Grey|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGray|LightGrey|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGray|LightSlateGrey|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGray|SlateGrey|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)|#[\da-f]{3,6})\|(.+?)#{2}/gi
Gruß jodel32

p.s. Da gibt es noch einige andere Bugs, ich muss sie mal alle sammeln, sind doch einige die da zusammenkommen. Melde mich mal damit.
Member: keine-ahnung
keine-ahnung Mar 11, 2016 at 17:19:30 (UTC)
Goto Top
Moin Frank,

ich versteh zwar nur Bahnhof, aber wenn alle Stricken reissen sollten, schick ich Dir 'ne Packung Buntstifte ... face-smile

LG, Thomas
Member: Sheogorath
Solution Sheogorath Mar 11, 2016 updated at 17:47:46 (UTC)
Goto Top
Moin,

naja, du musst nur ausschließen, dass davor Rauten kommen ;)

/[^#]*(#{2}([^#]+?)\|([^#]+?)#{2})[^#]*/g

That's it.

Edit: Mal so nebenbei, ich bevorzuge https://regex101.com/ ;)

Gruß
Chris
Member: Arano
Solution Arano Mar 11, 2016 at 18:56:30 (UTC)
Goto Top
(! regexpal.de funktioniert bei mir nicht korrekt !)

Hi, Nabend,

ich habe auch was anzubieten: /(##([^#|]+?)\|(.+?)##)/g (oh, noch ein Bug !?)
/(##([^#|]+?)\|(.+?)##)/g

Ich habe alle | im Text nummeriert und finde die folgenden Treffer: 1,4,11 und 12

Dieser ###12345|1Ungültig,## dffdgd##|2ölasdlkasöl|3ajsj##as##as#d ddf dfg###12345|4Ungültig,## aber . Jetzt kommt die Raute ####|5ölsdkf###sd##fd#sfd|6sdy7||8<asölkasd adplasd9||10a###a#s#as#d#afg#df#ggfd#d#fg#dfg#####dfg#d#fg 
##dfg#dfg###dfgdfgdf#g#fd##warum auch immer. Nun noch einmal ein ##green|11grüner Text ist gütig ## und zum Schluss noch eine Raute #.###asdasd|12asdad###

MATCH 1
1.	[8-28]	`##12345|1Ungültig,##`
2.	[10-15]	`12345`
3.	[16-26]	`1Ungültig,`
MATCH 2
1.	[75-95]	`##12345|4Ungültig,##`
2.	[77-82]	`12345`
3.	[83-93]	`4Ungültig,`
MATCH 3
1.	[294-328]	`##green|11grüner Text ist gütig ##`
2.	[296-301]	`green`
3.	[302-326]	`11grüner Text ist gütig `
MATCH 4
1.	[364-382]	`##asdasd|12asdad##`
2.	[366-372]	`asdasd`
3.	[373-380]	`12asdad`


Essen ist fertig, bis später face-smile
~Arano
Member: Frank
Frank Mar 12, 2016 updated at 08:18:50 (UTC)
Goto Top
BuHi,

vielen Dank an alle beteiligten User face-smile Hätte gar nicht so viel Feedback auf eine Regular Expressions Frage erwartet. Bin leider kein Regular Expressions Gott und daher habe ich mal wieder was gelernt.

Zum Thema: Ich habe alle Ansätze getestet und mich für einen entschieden. Generell ist die Seite https://regex101.com/ tatsächlich besser als mein Vorschlag von oben. Ich kannte sie noch nicht, daher ein Dankeschön an @Sheogorath. Hier mein Kommentare zu den einzelnen Lösungen:

@114757,

Gotscha, hier passt alles. War ja auch blöd von mir zwei Rauten zu nehmen und diese dann nur einmal zu erlauben. Statt dessen eine Raute und sie zweimal zu erlauben ist sicherlich klüger. Dann die genaue Eingrenzung von A-Z für die Farbe oder den Farbcode mit 3 oder 6 Zeichen. Jap, das hatte ich komplett übersehen. Diese Variante habe ich gerade im aktuellen Release eingebaut.

Da gibt es noch einige andere Bugs, ich muss sie mal alle sammeln, sind doch einige die da zusammenkommen. Melde mich mal damit.

ja klar, her damit, evtl können wir sie gemeinsam lösen. Gerne als PM oder hier als neuer Feedback-Beitrag.

@Sheogorath

Jap, auch diese Regel passt genau. Sie liefert aber zu viele Ergebnisse, bei langen Texten könnte das Performance kosten. Man müsste sie etwas vereinfachen.

@Arano

Auch diese Regel funktioniert, hat aber einen mini Fehler im Ergebnis, wenn ein Farbcode statt Farbname angegeben wird (wie z.B. ###ff9933. Den hatte ich allerdings in der ersten Version im Beispieltext oben auch nicht erwähnte, also meine Schuld).

ich habe auch was anzubieten: /(]+?)\|(.+?))/g (oh, noch ein Bug !?)

Nein, ich filtere im normalen Text einige Zeichen einfach raus. Man muss schon die Code-Tags für solche Dinge nutzen.


Noch mal vielen Dank für die Lösungen. Die nächste Hilfeanfrage bei Regular Expressions wird sicherlich kommen face-smile

Gruß
Frank