Hallo.
Ich bin gerade dabei nen PHP-Syntax-Highlighter zu schreiben.
Bisher klappt auch alles wunderbar, nur jetzt habe ich ein paar Probleme bei den Comments.
Ich habe 2 RegEx die noch nicth so richtig wollen:
/(.?)/ <- klappt nicht aber ich weiß nicht warum
//(.?)\n <- klappt auch i-wie nicht ... ebenfalls keine ahnung
edit: //(.*?)[\n] <-- so funktionierts.. also fehlt mir nurnoch das erste
Ich hoffe ihr könnt mir helfen
Vielen Dank im Voraus
Ich kann alles, außer das was ich brauche 😁
Wär auch gut wenn du noch schreiben würdest was du matchen willst. Denn ein "funktioniert nicht" ohne Beispiel lässt doch sehr viel interpretationsspielraum.
\d ≤ funktioniert beispielsweise wunderbar.
string Text = "<?php /quotation/ ?>";
RegEx RX = new RegEx("/(.?)*/");
Match m = RX.Match(Text);
so .. reicht das beispiel?
Ich kann alles, außer das was ich brauche 😁
Noch nicht ganz. Da ja noch nicht klar ist was du matchen möchtest.
Das Kommetar als ganzes?
Den Text des Kommentars?
Die PHP-Tags?
ich möchte halt alles was zwischen /* / steht haben + die / */ tags
<?php /quotation/ ?>
soll dann
/quotation/
per regex ausgeben 😉
Ich kann alles, außer das was ich brauche 😁
.(/*(.)*/).*
jetzt schreib er mir: Nicht erkannte Escapesequenz
???
an sich hab ich mir das auch schon gedacht, dass das von dir richtig ist
Ich kann alles, außer das was ich brauche 😁
Probier mal \ anstatt .
ServiceStack & Angular = =)
danke klappt jetzt perfekt
"(/\(.)\*/)" <-- ideal
danke nochmal
Ich kann alles, außer das was ich brauche 😁
Noch als kurze Anmerkung:
\ ist nur wegen C# nötig (nur in string-literalen) alternativ kannst du ein @ benutzen:
@".(/*(.)*/).*"
hab noch ne ergänzungsfrage.. was ist wenn ein \n \r \t oder sonstiges für eine neue zeile dazwischensteht?
<?php
/hier ist
ein komment/
...code
?>
wie muss dann die regex: "(/\(.)\*/)"
angepasst werden, damit das auch zeilenübergreifend funktioniert?
Ich kann alles, außer das was ich brauche 😁
Das kannst du mit den Entsprechenden RegexOptions machen
Gib deinem RegEx mal sowas:
<?php
echo "/* ich bin in einem string";
/* blablubb /* */
?>
Ich habs jetzt nicht ausprobiert, aber es dürfte valides PHP sein und ich denke er beißt sich daran die Zähne aus (bzw. matched zu viel).
Um Spachen zu parsen ist es meistens sinnvoller eine Parser zu schreiben, da kann man sich selten auf RegEx verlassen. Hatten wir auch schon mehrmals das Thema, falls ich mich nicht täusche.
/Edit: Code-Tag hinzugefügt.
Tut mir leid, dass ich dich enttäuschen muss, aber es wird richtig gematcht 😉
PS: mit multiline, das hab ich noch nciht hinbekommen.
Ich denke das ist besser, wenn ich das in der RegEx mit löse...
Also nochmal wie kann ich die RegEx: "(/\(.?)\*/)" mit \n\r\t benutzen...
ich überlege auch schon fleißig 😄
Ich kann alles, außer das was ich brauche 😁
Hallo IP-Sh0k,
mit multiline, das hab ich noch nciht hinbekommen.
Multiline wirkt auf ^ und $. Du musst Singleline verwenden. Das wirkt auf .
Ich denke das ist besser, wenn ich das in der RegEx mit löse...
Nö, nicht unbedingt.
herbivore
Tut mir leid, dass ich dich enttäuschen muss, aber es wird richtig gematcht 😉
Da du kein Multiline hast, ja. Dann nehmen wir halt den Zeilenumbruch aus meinem "Script":
<?php
echo "/* ich bin in einem string"; /* blablubb /* */
?>
... schon macht dein RegEx nicht mehr mit.
(Natürlich ist es fraglich ob man solchen Code tatsächlich irgendwo findet, ich will damit nur zeigen, dass ein RegEx nicht unbedingt der sicherste Weg ist um dein Problem zu lösen.)