TweakPC

Zurück   Computer Hardware Forum - TweakPC > Games und Software > Programmiersprachen

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22.03.2011, 15:08   #1 (permalink)
Overclocker
 
Benutzerbild von sofl
 

Registriert seit: 20.10.2005
Beiträge: 380

sofl wird schon bald berühmt werden

Standard [PHP] Reguläre Ausdrücke - Replace nur außerhalb von Acronym-Tags

Hallo Liebe Community!

Folgende Situation. Ich möchte in einem PHP-Script einen HTML Text, bzw. bestimmte Begriffe, mit Acronymtags versehen. Derzeitig tue ich das in einer Schleife.

Bsp.:

while begriffcount < max

suche & ersetze current_begriff mit <acronym title="current_beschreibung">current_begriff</acronym>

Die Beschreibung ist zu diesem Zeitpunkt bereits escaped, es kann also nicht passieren das das title-Attribut, durch nicht escapte quotes, geschlossen werden kann.

Mein Problem hierbei ist nun, dass wenn innerhalb der Beschreibung ein Begriff auftaucht, durch einfaches str_replace ein acronym im acronym ensteht.

Bsp.: <acronym title="<acronym title="....

Mein angedachter Lösungsansatz wäre nun ein preg_replace zu verwenden welcher das ersetzten innerhalb von acronym-Attributen und dem acronym-Content selbst untersagt und alles weitere ersetzt.

Leider bin ich in Sachen reguläre Ausdrücke kein Stück bewandert und habe auch im Internet nur Teillösungen gefunden die mir nicht weiter geholfen haben. Ich möchte auch keine HTML-Parser und/oder diverse Frameworks verwenden.

Kann mir eventuell jemand einen Denkanschub geben oder vllt sogar ein brauchbares Pattern basteln?

Danke.

mfg sofl.
sofl ist offline   Mit Zitat antworten
Alt 22.03.2011, 15:17   #2 (permalink)
Hardware Freak
 
Benutzerbild von Mother-Brain
 

Registriert seit: 19.01.2009
Beiträge: 10.754

Mother-Brain ist ein wunderbarer AnblickMother-Brain ist ein wunderbarer AnblickMother-Brain ist ein wunderbarer AnblickMother-Brain ist ein wunderbarer AnblickMother-Brain ist ein wunderbarer AnblickMother-Brain ist ein wunderbarer AnblickMother-Brain ist ein wunderbarer Anblick

Standard AW: [PHP] Reguläre Ausdrücke - Replace nur außerhalb von Acronym-Tags

vllt. ne einfache if Abfrage, ob das current_beschreibung zu einem "<acronym title=" werden würde?

So gut sind meine PHP Kentnisse leider auch nicht mehr, aber vllt. ist es ja nen Ansatz
Mother-Brain ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
sofl (22.03.2011)
Alt 22.03.2011, 15:40   #3 (permalink)
Overclocker
 
Benutzerbild von sofl
 

Registriert seit: 20.10.2005
Beiträge: 380

sofl wird schon bald berühmt werden

Standard AW: [PHP] Reguläre Ausdrücke - Replace nur außerhalb von Acronym-Tags

Zitat:
Zitat von Mother-Brain Beitrag anzeigen
vllt. ne einfache if Abfrage, ob das current_beschreibung zu einem "<acronym title=" werden würde?

So gut sind meine PHP Kentnisse leider auch nicht mehr, aber vllt. ist es ja nen Ansatz
Hallo Mother Brain, danke für deine Antwort. Die Idee ist garnicht mal so schlecht. Allerdings müsste ich dann, (korrigiere mich wenn ich mich irre), eine verschachtelte Schleife bauen die bei jedem generieren eines Tags erneut schauen muss die Beschreibung, Begriffe aus der Liste enthält. Das würde unter Umständen ziemlich lange dauern da die Liste ziemlich groß ist und stetig wächst.

Ich habe mir derzeitig eine Notlösung gebaut. Ist zwar nicht die feine englische Art aber funktioniert. (Falls es wen interessieren sollte)

PHP-Code:
function fillWithAcronyms($all,$begriff,$besch,$pos=0){
    
$pos_begriff stripos($all$begriff,$pos);
    
    if(
$pos_begriff===false)
        return 
$all;
    else
    {
        
$pos_acstart strripos(substr($all,0,$pos_begriff), '<acronym title="');
        
$pos_acend strripos(substr($all,0,$pos_begriff), '</acronym>');
    }
    
    if(
$pos_acstart===false && $pos_acend===false)
    {
        
$all=substr_replace($all'<acronym title="'.$besch.'">'.$begriff.'</acronym>'$pos_begriffstrlen($begriff));
        
$all=fillWithAcronyms($all,$begriff,$besch,$pos_begriff);
    }
    elseif(
$pos_acstart!==false && $pos_acend!==false)
    {
        if(
$pos_acstart $pos_acend)
        {
            
$all=substr_replace($all'<acronym title="'.$besch.'">'.$begriff.'</acronym>'$pos_begriffstrlen($begriff));
            
$all=fillWithAcronyms($all,$begriff,$besch,$pos_begriff);
        }
        else
            
$all=fillWithAcronyms($all,$begriff,$besch,$pos_begriff+strlen($begriff));
    }
        
    return 
$all;

Würde mich allerdings trotzdem über eine Lösung mit regulären Ausdrücken freuen.

mfg sofl
sofl ist offline   Mit Zitat antworten
2 Benutzer bedanken sich für den Beitrag:
Mother-Brain (22.03.2011), Profi Overclocker (22.03.2011)
Alt 22.03.2011, 20:33   #4 (permalink)
Stickstoff Junkie
 
Benutzerbild von DonSchado
 

Registriert seit: 03.01.2006
Beiträge: 3.205

DonSchado ist ein wunderbarer AnblickDonSchado ist ein wunderbarer AnblickDonSchado ist ein wunderbarer AnblickDonSchado ist ein wunderbarer AnblickDonSchado ist ein wunderbarer AnblickDonSchado ist ein wunderbarer AnblickDonSchado ist ein wunderbarer Anblick

Standard AW: [PHP] Reguläre Ausdrücke - Replace nur außerhalb von Acronym-Tags

schau dir mal Rubular an. Rubular: a Ruby regular expression editor and tester
Da steht zwar "für Ruby", aber soweit ich weiß sind RegExp = RegExp...

Hat mir bei dem ein oder anderen Pattern schon sehr geholfen.
Vorallem weil man sich testweise (try&error)
an das passende Pattern herantasten kann.

edit: einfach mal auf "try an example" klicken

Hoffe das hilt dir.
Lg
DonSchado ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
sofl (23.03.2011)
Alt 23.03.2011, 11:26   #5 (permalink)
Overclocker
 
Benutzerbild von sofl
 

Registriert seit: 20.10.2005
Beiträge: 380

sofl wird schon bald berühmt werden

Standard AW: [PHP] Reguläre Ausdrücke - Replace nur außerhalb von Acronym-Tags

Ich schau mal drüber, Danke.
sofl ist offline   Mit Zitat antworten
Alt 19.12.2012, 10:35   #6 (permalink)
Neuling
 

Registriert seit: 19.12.2012
Beiträge: 5

sevsh befindet sich auf einem aufstrebenden Ast

Standard AW: [PHP] Reguläre Ausdrücke - Replace nur außerhalb von Acronym-Tags

Auch wenn die Frage schon etwas älter ist, so ist der Sachverhalt doch ziemlich interessant.
Ich hätte auf Anhieb einen Ansatz, der nicht auf einem komplexen regulären Ausdruck basiert:
- du könntest den Text nach den vorhandenen Akronymen durchsuchen und in einen Array schreiben, wenn dies geschehen ist, ersetzt du nur noch die gefundenen Akronyme des Arrays im Text (so verhinderst du das durch ein ersetzen mit den neuen Beschreibungstexten neue Akronyme hinzukommen, da bereits dein Array mit den zu ersetzenden Akronymen besteht und keine weiteren hinzukommen können).
sevsh ist offline   Mit Zitat antworten
Antwort

Stichworte
acronymtags, ausdrã¼cke, ausdrücke, außerhalb, php, regulã¤re, reguläre, replace


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[News] Steam Tags: Spieler kategorisieren Spiele TweakPC Newsbot News 0 13.02.2014 18:08
Win XP registry außerhalb von Win bearbeiten? baecker Windows & Programme 4 24.02.2010 16:19
Rechner außerhalb des Gehäuses betreiben? SMeier Gehäuse und Case-Modding 28 21.05.2007 23:12
[php] und [code] Tags in Breite wie Zitat? tele Feedback & Fragen an die Crew 2 23.02.2006 11:15


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr.






Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum, Datenschutz Copyright © 1999-2015 TweakPC, Alle Rechte vorbehalten, all rights reserved