Du bist hier: Seitenreport Forum Web-Entwicklung PHP & MySQL Reguläre Ausdrücke: Submuster gruppieren
Reguläre Ausdrücke: Submuster gruppieren
| Verfasst am: 23. 06. 2011 [15:33] | |||
behalx Dabei seit: 30.09.2010 Themenersteller ![]() 52 Beiträge | Beitrag hilfreich? | ||
| Folgendes Szenario: Ich will bestimmte Wörter (z.B. String oder System) fett markieren, aber dieser Wörter müssen sich innerhalb geschweifter Klammern befinden. Beispiel: PHP class HalloString {
public static void main(String[] args) {
System.out.println("Hallo, Welt!");
}
}(Hallo + ) String sollte nicht fett markiert werden, aber String (+ []) schon. Ich habe es so versucht: PHP $reg = '/(\{)(.*)(String)(.*)(\})/';
$rep = '$1$2<b>$3</b>$4$5';
$code = preg_replace($reg, $rep, $code);aber es klappt nicht. Kennt jmd. eine Lösung? Vll. mit Hilfe von Submustern? [Dieser Beitrag wurde 7mal bearbeitet, zuletzt am 23.06.2011 um 16:02.] | |||
| Verfasst am: 23. 06. 2011 [16:38] | |||
joerg Dabei seit: 09.06.2009 ![]() 1540 Beiträge | Beitrag hilfreich? | ||
| Hallo Behalx So würde ich das abändern. Zeilenwechsel werden durch die Option s mit berücksichtigt. Nicht gierige Suche müsstest du mit der Option U noch aktivieren. Und dann musst du noch abfangen das die Klammer zwischendrin nicht geschlossen wird. Und dann habe ich den Ausdruck mal minimiert. PHP $code = 'class {}HalloString {
public static void main(String[] args) {
System.out.println("Hallo, Welt!");
}
{String}{}String{}
}';
$reg = '/({[^}]*)(String)(.*})/Us';
$rep = '$1<b>$2</b>$3';
$code = preg_replace($reg, $rep, $code);
echo $code;Wäre das keine Alternative? http://php.net/manual/de/function.highlight-string.php Gruß Jörg | |||
| Verfasst am: 23. 06. 2011 [18:02] | |||
behalx Dabei seit: 30.09.2010 Themenersteller ![]() 52 Beiträge | Beitrag hilfreich? | ||
| Danke. Es klappt. Gab es einen Grund für diesen Ausdruck "({[^}]*) ..." ? Mit Hilfe von "Us" klappt es auch so: PHP $reg = '/(\{)(.*)(System|String)(.*)(\})/Us';
$rep = '$1$2<b>$3</b>$4$5';
$code = preg_replace($reg, $rep, $code);Jedoch wird immer nur System oder String fett markiert (in beiden Versionen). Gibt es eine Möglichkeit, wie beide (bzw. noch mehr) Alternativen ersetzt werden? Nein. Ich programmiere zur Zeit einen Syntaxhighlighter für Java. [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 23.06.2011 um 18:02.] | |||
| Verfasst am: 23. 06. 2011 [22:49] | |||
joerg Dabei seit: 09.06.2009 ![]() 1540 Beiträge | Beitrag hilfreich? | ||
"behalx" schrieb: Gab es einen Grund für diesen Ausdruck "({[^}]*) ..." ? Mit Hilfe von "Us" klappt es auch so: Okay aber dann wird auch so was umgewandelt. {}String{} "behalx" schrieb: Jedoch wird immer nur System oder String fett markiert (in beiden Versionen). Gibt es eine Möglichkeit, wie beide (bzw. noch mehr) Alternativen ersetzt werden? Ist die Frage welche Schreibweise dir jetzt eher zusagt. PHP $syntax = array('String','System');
foreach ($syntax as $var)
{
$reg = '/({[^}]*)('.$var.')(.*})/Us';
$rep = '$1<b>$2</b>$3';
$code = preg_replace($reg, $rep, $code);
}
//oder
$reg = array('/({[^}]*)(String)(.*})/Us','/({[^}]*)(System)(.*})/Us');
$rep = array('$1<b>$2</b>$3','$1<b>$2</b>$3');
$code = preg_replace($reg, $rep, $code);Die Problematik rührt daher wenn in einem Bereich schon ein Austausch stattgefunden hat, das dieser mit deiner Abfrage nicht noch mal durchsucht wird. Ich weiss jetzt nicht ob {{}String} vorkommen könnte rein theorethisch. Wenn ja müsste man das noch mit PHP $reg = '/({[^}]*[{[^}]*}]*)(String)(.*})/Us';abdecken können durch einen zusätzlichen Lauf mit Ersetzen. Aber bei dem regulären Ausdruck bin ich mir jetzt nicht so sicher ob es nicht noch besser geht. Gruß Jörg [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 23.06.2011 um 22:51.] | |||
| Verfasst am: 23. 06. 2011 [23:17] | |||
Matthes Dabei seit: 08.05.2010 ![]() 174 Beiträge | Beitrag hilfreich? | ||
| An dieser Stelle möchte ich einmal eines meiner Lieblingstools empfehlen, es wäre wohl nirgendwo passender als hier: http://gskinner.com/blog/archives/2008/03/regexr_free_onl.html Mit diesem kleinen Helferlein wird das Level von Herumprobieren und Umstellen von "frustrierend" auf "ahso!" gehoben. ;) Mal: "May have been the losing side. Still not convinced it was the wrong one." | |||
| Verfasst am: 24. 06. 2011 [00:00] | |||
behalx Dabei seit: 30.09.2010 Themenersteller ![]() 52 Beiträge | Beitrag hilfreich? | ||
| Sieht interessant aus. Werde ich mir mal bei Gelegenheit anschauen. @Jörg Funktioniert auch nicht, da z.B. bei dem Array ("String", "System") genau ein System und ein String fett markiert werden, aber die anderen jedoch nicht. Ich habe aber jetzt eine billigere Lösung gefunden: PHP $reg = '/([^\w])(String|System)([^\w])/'; $rep = '$1<b>$2</b>$3'; $code = preg_replace($reg, $rep, $code); Dadurch werden z.B. alle String\w+ ignoriert, aber dafür z.B. String[] oder String nicht. [Dieser Beitrag wurde 5mal bearbeitet, zuletzt am 24.06.2011 um 00:39.] | |||
| Verfasst am: 24. 06. 2011 [06:12] | |||
romacron Dabei seit: 01.11.2009 ![]() 1143 Beiträge | Beitrag hilfreich? | ||
| Hallo Matthes. Kurz und schmerzlos. Klasse Tool. Wurde soeben in die "must have" aufgenommen. Vielen Dank | |||
| Verfasst am: 26. 06. 2011 [22:04] | |||
Ultima Dabei seit: 09.07.2010 ![]() 759 Beiträge | Beitrag hilfreich? | ||
| Hallo, warum baust du ihn dir selber? Nimm doch einfach den hier. http://qbnz.com/highlighter/ Wenn du es trotzdem selber versuchen willst, google mal ein wenig nach Parsergeneratoren und Compilerbau. Denn das ist keine leichte Aufgabe die du da hast, Java ist doch schon recht komplex. Da die Syntax zu Validieren ... viel Spaß. Schöne Grüße Mein Portal: Ultima-Project.net - Gold für alle | |||
| Verfasst am: 27. 06. 2011 [11:42] | |||
behalx Dabei seit: 30.09.2010 Themenersteller ![]() 52 Beiträge | Beitrag hilfreich? | ||
| Wenn ich mal absolut nicht weiter weiß, werde ich mir das mal anschauen. Aber dann würde ich auch nichts mehr über reguläre Ausdrücke in PHP lernen. | |||
| Verfasst am: 27. 06. 2011 [12:42] | |||
Chance Dabei seit: 13.11.2009 ![]() 140 Beiträge | Beitrag hilfreich? | ||
| Meine Empfehlung: http://regexp-tester.mediacix.de/ . www.piacos.de www.psi-portal.de | |||
Du bist nicht eingeloggt. Bitte beachte, dass Du eingeloggt sein musst, um Themen zu erstellen oder auf Beiträge zu antworten.
Werde in Echtzeit über neue Foren-Beiträge informiert:
6 Mitglieder waren innerhalb der letzten 15 Minuten online (60 heute gesamt):
Filippo, KlausPilsner, ronny82, San, timeless_81
Administratoren und Moderatoren:
seitenreport
Seitenreport hat 18153 registrierte Mitglieder, 3003 Themen und 29112 Beiträge.
Der aktuelle Mitgliederzuwachs liegt bei durchschnittlich 12 bestätigten Neuregistrierungen pro Tag.
Pro Tag werden im Seitenreport Forum durchschnittlich 1 neues Thema und 7 Beiträge erstellt.
Die Durchschnittszahlen berechnen sich aus den letzten 7 Tagen.

Lade...
Neueste Foren-Beiträge
| Abstimmung: 20.000 Mitglieder Jubiläum - was tun? Internes & Ankündigungen / Internes | Gestern [23:07] | |
| Microsofts soziales Netzwerk So.cl Internet / News | Gestern [20:03] | |
| Nicht nachvollziehbarer CSS Fehler Internes & Ankündigungen / Analyse-Ergebnisse | Gestern [13:37] | |
| Partnerprogramm: Eintrag für Kunden erledigt Internes & Ankündigungen / Internes | 22. 05. 2012 [10:35] | |
| Hotelbericht Entwickler Treffpunkt / Website vorstellen | 22. 05. 2012 [09:28] |
Lade...
Aktuelle Artikel:
Facebook - eine neue Tech-Blase?
Facebook ist in den vergangenen Tagen wegen seines Börsenganges und den dabei eingefahrenen Investorengeldern von 16 Milliarden Dollar großflächig in die Kritik geraten. Der Marktwert von 104 Milliarden Dollar wird von vielen als maßlos übertrieben angesehen. Ist Facebook eine neue Internet-Blase, die in den nächsten Jahren platzen wird?
Suchmaschinenoptimierung seit dem Google Penguin Update
Das neue Update vom Branchenriesen Google wird in Seo-Kreisen gerne mit einem Erdbeben verglichen. Diese Metapher trifft die Sachlage sehr gut, denn der Pinguin bringt die Arbeitsfundamente der Suchmaschinenoptimierer gehörig ins Wanken.
Tipps für den guten Start ins Business
Sich selbstständig machen, eine Firma gründen und direkt ins eigenständige Berufsleben einzusteigen klingt spannend und irgendwie auch einfach. Doch einfach ist es ganz und gar nicht...
Facebook - eine neue Tech-Blase?
Facebook ist in den vergangenen Tagen wegen seines Börsenganges und den dabei eingefahrenen Investorengeldern von 16 Milliarden Dollar großflächig in die Kritik geraten. Der Marktwert von 104 Milliarden Dollar wird von vielen als maßlos übertrieben angesehen. Ist Facebook eine neue Internet-Blase, die in den nächsten Jahren platzen wird?
18. Mai 2012
Suchmaschinenoptimierung seit dem Google Penguin Update
Das neue Update vom Branchenriesen Google wird in Seo-Kreisen gerne mit einem Erdbeben verglichen. Diese Metapher trifft die Sachlage sehr gut, denn der Pinguin bringt die Arbeitsfundamente der Suchmaschinenoptimierer gehörig ins Wanken.
15. Mai 2012
Tipps für den guten Start ins Business
Sich selbstständig machen, eine Firma gründen und direkt ins eigenständige Berufsleben einzusteigen klingt spannend und irgendwie auch einfach. Doch einfach ist es ganz und gar nicht...
14. Mai 2012





