2012-04-06 25 views
3

So entschied ich mich, einen Stich zu haben, ein Texthervorhebungssystem zu machen. Im Moment bin ich mit str_replace nur ein Wort zu ersetzen (zB $rstr = str_replace("Console", "<c>Console</c>", $str wo $str ist die Eingabezeichenfolge.

Etwas, das ich verblüfft war, wie Inhalte zu ersetzen, innerhalb von Sprachzeichen (") und Anführungszeichen ('). Für wenn beispielsweise die Zeichenfolge „Console“ in Console.WriteLine("Words"); gedreht, wie würde ich ersetzen "Words" mit <sr>"Words"</sr> (<sr> in einem externen Stylesheet definiert ist)?

ich allerdings hatte die ich Regex verwenden könnte, aber 1. ich glaube nicht, wissen, wie man regex schreibt, und 2. ich weiß nicht, wie man regex mit str_replace. php - Ersetzen von Inhalt in doppelte Anführungszeichen, einschließlich doppelte Anführungszeichen


Meine Abhilfe Lösung:

function hlStr($original) 
{ 
    $rstr = explode('"', $original); 
    return $rstr[0].'<sr>"'.$rstr[1].'"</sr>'.$rstr[2]; 
} 

Antwort

7

Im Lichte der Kommentare unten, ich denke, das eine bessere Ressource für Sie sein: http://www.regular-expressions.info/

Um „alles kann hier gehen“ zu finden Sie reguläre Ausdrücke verwenden sollten. Dafür wurden sie gemacht. Ein regulärer Ausdruck für das könnte so etwas wie die Antworten auf diese Frage suchen:

How can I match a quote-delimited string with a regex?

dann würden Sie die Funktion preg_replace() wie folgt verwenden:

$return_value = preg_replace('/"[^"]+"/', 'replacement text', $str) 

dies hier verlassen trotzdem:

entkommen Sie einfach den Inhalt mit einem Backslash:

$rstr = str_replace("Console", "Console.WriteLine(\"$variable\");", $str) 

Dies ist vor allem nützlich, wenn Sie Variablen in Ihren Strings verwenden. Wenn es nur ein geradliniger Textersatz ist, verwenden Sie einfache Anführungszeichen:

die einfachen Anführungszeichen zählen alles außer einzelne Anführungszeichen als nur ein Zeichen.

+0

das ist nicht das Problem ist, das Problem der doppelten Anführungszeichen ersetzt, und alles dazwischen (das ist nicht vorbestimmt) mit ihnen, und enthalten sie innerhalb '' tags. So 'Console.WriteLine (" RandomWords ");' muss in 'Console.WriteLine (" RandomWords ");'. Ich bin nicht sicher, wie ich das machen soll, weil ich vorher nicht bestimmen kann, was "RandomWords" sein wird, und es könnte mehrere Vorkommnisse innerhalb der Zeichenfolge geben, bei der Dinge ersetzt werden. – LMS

+0

oh. Sie brauchen Regex. –

+0

Ja, aber ich bin nicht sicher, wie man das in 'str_replace' implementiert, und ich bin unsicher, wie man Regex schreibt. – LMS

0

Das ist meine Lösung. Zerlege die ganze Zeichenkette mit (") Symbolen und führe dann einen spezifischen Code für jede Sekunde aus. Dieser Code macht es automatisch zu jedem zweiten Wert nach" item ", was bedeutet, dass du: hej" lol; es würde sich ändern zu: hi <sr>" lol "</sr>, oder wenn Sie tun:; hallo „mit“ Sie würde es ändern. hi <sr>" with "</sr> you usw.

function wrapInside($text,$symbol) 
    { 
     $string = explode($symbol, $text); 
     $i = 1; 
     $QS = ''; 
     foreach($queryString as $V) 
     { 
      ($i == 1) ? ($QS .= $V) : ($QS .= '<sr>"'.trim($V).'"</sr>'); 
      ($i == 1) ? ($i = 0) : ($i = 1); 
     } 
     $queryString = trim($QS); 
     return $queryString; 
    } 
Verwandte Themen