ok, ik ben nu begonnen met een soort algemene code highlighter in php maar loop tegen een aantal problemen aan. en doe dat in php dmv regular expressions.
ik ben geen ster in regular expressions, dus daarom klop ik bij jullie aan, maar ik heb natuurlijk wel eerst gezocht.
uit dit topic heb ik wel een deel kunnen halen maar niet mijn vragen:
nu heb ik al dit:
't is wat chaotisch, met al die preg_preplace dingen, maar als alles werkt gooi ik het wel in een array
probleem 1:
ik heb nu dat je '(',')','{','}','[',']' hightlight, en de code er in ook, en dat werkt goed, maar nu wil ik dat als er '\\[' staat dat deze niet meegeteld wordt
ik heb op deze site al gezocht en alles door gelezen, maar snap niet of ik nou (?![\\\]) of [^[\\]] moet gebruiken..
beide werke niet namelijk
op de site staat dat ?![iets] de resulaten omdraait (soort not operator) maar ^ als eerste teken in een class([])
probleem 2:
het 2de probleem is dat ik nu gebruik maar van een extra variable ($foo) om de infomratie tussen de [ code] [/code] tags te veranderen.
nu werkt dit wel, maar het werkt slechts voor de laatste keer dat '[code]' voorkomt in de totale text ($input)
als er dus meerdere keren [code] tags gebruikt worden zie je alleen de laatste.
ik weet dat er een oplossing is door limit van preg_replace op 1 te zetten (wat ik nu heb) en dan een soort for loopje te maken, maar dit vind ik nogal slecht.
ik vroeg me af of ik niet op de een of andere manier alles in 1 of meerdere preg_replace dingen kan doen die universeel ALLE [code] tags afgaan.
ikzelf dacht aan zoiets:
en dat dan voor alle tags ('(',')','{','}','[',']')
dit werkt opzich wel, maar alleen voor de laatste keer dat het teken ('[' in dit geval) in de text voorkomt
ik ben er inmiddels wel achter dat het niet slim van me is op 2 vars te gebruiken, en probeer $foo dus weg te krijgen, maar ik heb geen idee hoe dit aan te pakken
probleem 3:
ben ik nog niet echt aan toe gekomen, maar nou ik toch bezig ben: qoutes!
hoe herken je aan een ", ' of ` of het een openen of sluiten quote is.
je moet ze dan parsen in groepen van 2 neem ik aan?
hoe zou ik dat moeten aanpakken?
edit: waarom werken [pre] tags niet op dit forum? dat is best onhandig voor dit soort topics
edit2: typo's + sorry voor layout verneuking
ik ben geen ster in regular expressions, dus daarom klop ik bij jullie aan, maar ik heb natuurlijk wel eerst gezocht.
uit dit topic heb ik wel een deel kunnen halen maar niet mijn vragen:
nu heb ik al dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| $foo = preg_replace("/.*\\[code\](.*)\\[\/code\].*/i","$1",$input,1); $foo = str_replace (" "," ",$foo); $foo = preg_replace("/\\[/i","<FONT color=\"#FF0000\">[</FONT><FONT color=\"#77FF77\">",$foo); $foo = preg_replace("/\]/i","</FONT><FONT color=\"#FF0000\">]</FONT>",$foo); $foo = preg_replace("/\(/i","<FONT color=\"#FF0000\">(</FONT><FONT color=\"#777777\">",$foo); $foo = preg_replace("/\)/i","</FONT><FONT color=\"#FF0000\">)</FONT>",$foo); $foo = preg_replace("/\{/i","<FONT color=\"#FF0000\">{</FONT><FONT color=\"#77FFFF\">",$foo); $foo = preg_replace("/\}/i","</FONT><FONT color=\"#FF0000\">}</FONT>",$foo); $foo = preg_replace("/\</i","<FONT color=\"#FF0000\"><</FONT><FONT color=\"#7777FF\">",$foo); $foo = preg_replace("/\>/i","</FONT><FONT color=\"#FF0000\">></FONT>",$foo); $foo = preg_replace("/\|/i","<FONT color=\"#FF0000\">|</FONT>",$foo); $input = preg_replace("/\\[code\].*\\[\/code\]/i","[code]".$foo."[/code]",$input,1); |
't is wat chaotisch, met al die preg_preplace dingen, maar als alles werkt gooi ik het wel in een array
probleem 1:
ik heb nu dat je '(',')','{','}','[',']' hightlight, en de code er in ook, en dat werkt goed, maar nu wil ik dat als er '\\[' staat dat deze niet meegeteld wordt
ik heb op deze site al gezocht en alles door gelezen, maar snap niet of ik nou (?![\\\]) of [^[\\]] moet gebruiken..
beide werke niet namelijk
op de site staat dat ?![iets] de resulaten omdraait (soort not operator) maar ^ als eerste teken in een class([])
ik maa dan zoiets:if it is used at the beginning of a character class, it reverses the meaning of the character class. Everything not included in the listed character set is matched
PHP:
of1
| $foo = preg_replace("/[?1\\\]\(/i","<FONT color=\"#FF0000\">(</FONT><FONT color=\"#777777\">",$foo); |
PHP:
1
| $foo = preg_replace("/[^[\\]]\(/i","<FONT color=\"#FF0000\">(</FONT><FONT color=\"#777777\">",$foo); |
probleem 2:
het 2de probleem is dat ik nu gebruik maar van een extra variable ($foo) om de infomratie tussen de [ code] [/code] tags te veranderen.
nu werkt dit wel, maar het werkt slechts voor de laatste keer dat '[code]' voorkomt in de totale text ($input)
als er dus meerdere keren [code] tags gebruikt worden zie je alleen de laatste.
ik weet dat er een oplossing is door limit van preg_replace op 1 te zetten (wat ik nu heb) en dan een soort for loopje te maken, maar dit vind ik nogal slecht.
ik vroeg me af of ik niet op de een of andere manier alles in 1 of meerdere preg_replace dingen kan doen die universeel ALLE [code] tags afgaan.
ikzelf dacht aan zoiets:
PHP:
1
| $input = preg_replace("/.*\\[code\](.*)\\[(.*)\\[\/code\].*/i","$1<FONT color=\"#FF0000\">[</FONT><FONT color=\"#77FF77\">$2",$input); |
en dat dan voor alle tags ('(',')','{','}','[',']')
dit werkt opzich wel, maar alleen voor de laatste keer dat het teken ('[' in dit geval) in de text voorkomt
ik ben er inmiddels wel achter dat het niet slim van me is op 2 vars te gebruiken, en probeer $foo dus weg te krijgen, maar ik heb geen idee hoe dit aan te pakken
probleem 3:
ben ik nog niet echt aan toe gekomen, maar nou ik toch bezig ben: qoutes!
hoe herken je aan een ", ' of ` of het een openen of sluiten quote is.
je moet ze dan parsen in groepen van 2 neem ik aan?
hoe zou ik dat moeten aanpakken?
edit: waarom werken [pre] tags niet op dit forum? dat is best onhandig voor dit soort topics
edit2: typo's + sorry voor layout verneuking
[ Voor 48% gewijzigd door BasieP op 14-11-2003 11:40 ]
This message was sent on 100% recyclable electrons.