wie Sie abschneiden, einen string mit Hilfe regulärer Ausdruck in perl
Ich habe folgenden string in einer Datei und wollen, kürzen Sie die Zeichenfolge, um nicht mehr als 6 char. wie zu tun, dass die Verwendung regulärer Ausdruck in perl?
die original-Datei ist:
Katze shortstring.in:
<value>[email protected]</value>
<value>[email protected]</value>
Möchte ich, um die Datei als:
Katze shortstring.aus
<value>1234@g</value>
<value>1235@g</value>
Ich habe einen code wie folgt, gibt es keine effizientere Methode als die Verwendung
s/<value>(\w\w\w\w\w\w)(.*)/$1/;
?
Ist hier ein Teil von meinem code:
while (<$input_handle>) { # take one input line at a time
chomp;
if (/(\[email protected])/) {
s/(<value>\w\w\w\w\w\w)(.*)</value>/$1/;
print $output_handle "$_\n";
} else {
print $output_handle "$_\n";
}
}
- ist kein Wort-Zeichen, damit ist nicht abgestimmt mit \w. Außerdem denke ich, dass Sie nicht bedeuten, zu entfernen
<value>
Teil?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese stattdessen zu verwenden (regex ist nicht das einzige feature von Perl und es ist overkill für diese: 🙂
http://perldoc.perl.org/functions/substr.html
Im Kontext der Ausschnitt aus deiner Frage, verwenden Sie
oder, um es mit einem einzigen Muster
Mit Pony als Trennzeichen auf der substitution-operator verhindert Schiefe Zahnstocher-Syndrom in
</value>
.HINWEIS: Die üblichen Warnungen zu "Parsen" von XML mit regulären Ausdrücken anwenden.
Demo-Programm:
Ausgabe:
s///
Betreiber. Mit Pony bedeutete, dass ich nicht haben, um die Flucht der Schrägstrich in</value>
.Versuchen Sie dies:
Sieht aus wie Sie möchten, kürzen Sie den text innerhalb der Tags, die könnte kürzer als 6 Zeichen ist bereits, in dem Fall:
@google.com
kann es also nicht kleiner sein als das. Wenn Sie wollen mehr aufpassen, Sie testen konnte, für den Abschluss-tag, aber da das Parsen von xml oder html in ein regex ist eine wirklich, WIRKLICH SCHLECHTE IDEE, jedenfalls glaube ich nicht geben ihm keine Ideen.