suche und ersetze mit Ruby Regex

8

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.

    
randombits 16.01.2011, 01:46
quelle

3 Antworten

31
%Vor%

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:

%Vor%

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%     
Phrogz 16.01.2011, 01:51
quelle
6

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%     
the Tin Man 16.01.2011 02:12
quelle
2

Verwenden Sie String.gsub mit dem regulären Ausdruck <h5>[^<]+<\/h5> :

%Vor%

Hinweis: Sie können den regulären Ausdruck von Ruby bequem in Ihrem Browser testen .

    
miku 16.01.2011 01:54
quelle

Tags und Links