Ich habe ein Text-Blob-Feld in einer MySQL-Spalte, die HTML enthält. Ich muss etwas vom Markup ändern, also dachte ich, ich mache es in einem Ruby-Skript. Ruby ist hier irrelevant, aber es wäre schön, eine Antwort zu sehen. Das Markup sieht folgendermaßen aus:
%Vor% Ich muss nur den ersten <h5>foo</h5>
-Block jedes Textes in <h2>something_else</h2>
ändern, während ich den Rest der Zeichenkette alleine lasse.
Mit Ruby scheint es nicht möglich zu sein, den richtigen PCRE-Regex zu erhalten.
Wenn String#sub
anstelle von String#gsub
verwendet wird, wird nur die erste Ersetzung durchgeführt. Wenn Sie dynamisch auswählen müssen, was "foo" ist, können Sie die String-Interpolation in Regex-Literalen verwenden:
Wenn Sie andererseits wissen, was 'foo' ist, brauchen Sie keine Regex:
%Vor%oder sogar:
%Vor%Wenn Sie Code ausführen müssen, um die Ersetzung herauszufinden, können Sie die Blockform von sub:
verwenden %Vor%Immer wenn ich HTML oder XML parsen oder ändern muss, greife ich nach einem Parser. Ich beschäftige mich fast nie mit Regex oder Instring, es sei denn, es ist absolut ein Kinderspiel.
So funktioniert es mit Nokogiri, ohne Regex:
%Vor%Nach dem Parsen ist Nokokiri aus dem Fragment zurückgekehrt:
%Vor%Dies ist nach dem Ausführen:
%Vor% Verwenden Sie String.gsub mit dem regulären Ausdruck <h5>[^<]+<\/h5>
:
Hinweis: Sie können den regulären Ausdruck von Ruby bequem in Ihrem Browser testen .