Ich bin auch nicht so fit, was reguläre Ausdrücke anbetrifft. Cheatah kenn sich da besser aus.
Aber Doku hast du im Haus. Bei der Perldoku heißt das entsprechende Kapitel perlre. Also je nach System perltoc perlre oder die Datei perlre.html und perlop.html#Regexp_Quote_Like_Operators.
Ansonsten schau mal bei http://www.perltutor.com vorbei. Da steht zwar (noch) nichts über reguläre Ausdrücke, aber das kommt wohl noch.
So jetzt werd ich versuchen den Ausdruck auseinanderzunehmen.
$DecodeNews =~ s/([i])(.+?)([/i])/$2/isg;
$DecodeNews =~
$DecodeNews ist der string, der durchsucht wird.
=~ ist der „Regulärer-Ausdruck-operator“
s/$s1/$s2/ ist der Ersetzungsoperator im Ggsatz zu m//
$s1 ist das suchmuster, $s2 beschreibt die ersetzung.
([i])
Die runden klammern bewirken, daß das entsprechende Muster innerhalb der Klammer in die Variablen $1, $2 usw. geschrieben werden, und zwar von links nach rechts.
Die Backslashes „quoten“ ein Zeichen. Die Eckigen Klammern würden ohne den Backslash als ein „Metazeichen“ angesehen werden. (Eckige Klammern bestimmen eine „Zeichenklasse“ z.b. [a…z] wären alle zeichen zw. a und z
Das i ist einfach ein i. (Manchmal ist eine Zigarre ganz einfach eine Zigarre (Sigmund Freud))
(.+?)
Rund Klammern wie gehabt (in $2, hier der Text zw. und ).
. ist ein beliebiges Zeichen ausser \n
- beschreibt ein einmaliges oder mehrfaches Vorkommen
/$2/
das ist die ersetzung.
zu \I sagt das Handbuch:
When the bracketing construct ( … ) is used, \ matches the digit’th substring. Outside of the pattern, always use $'' instead of ‚‘ in front of the digit. (While the \ notation can on rare occasion work outside the current pattern, this should not be relied upon. See the WARNING below.) The scope of $ (and $`, $&, and $’) extends to the end of the enclosing BLOCK or eval string, or to the next successful pattern match, whichever comes first. If you want to use parentheses to delimit a subpattern (e.g., a set of alternatives) without saving it as a subpattern, follow the ( with a ?:.
was ich dummerweise auch nicht ganz verstehe.
Auf jeden Fall werden alle texts durch _text_´s ersetzt. (und das ist doch eigentlich das Gegenteil von dem was du willst.)
/isg;
i=Groß- Kleinschreibung beachten
s=Behandle den String als eine Zeile
g=Ersetze alle Vorkommnisse (ohne g wäre es immer nur der erste)
Was dein Problem mit den erlaubten/nicht erlaubten Tags angeht, so laufe doch einfach durch eine Liste der erlaubten Tags und lösche die unerlaubten durch Ersetzten mit Nichts.
hoffedirgeholfenzuhaben.
holli