amir_e_a has asked for the wisdom of the Perl Monks concerning the following question:
Hello,
I am proofreading the WikiSource edition of Gesenius' Hebrew Grammar, a famous grammar book of the Biblical Hebrew language.
It has many references to the Bible using a MediaWiki template in this form: {{GHGbible-ref|book=Gn|chapter=2|verse=3}}; this creates a link to Genesis chapter 2 verse 3.
This template has already been used in many places where it is needed, but i want to put it automatically everywhere else. Basically, there are many pieces of text that go like this:
<p>this preposition appears in {{GHGbible-ref|book=Gn|chapter=2|verse=3}} and also in 4:5.</p>I want to turn this into:
<p>this preposition appears in {{GHGbible-ref|book=Gn|chapter=2|verse=3}} and also in {{GHGbible-ref|book=Gn|chapter=4|verse=5}}.</p>I can do it using this regex:
<p>s/(\{\{GHGbible-ref\|book=([^|]+)\|chapter=\d+\|verse=\d+\}\})(.+?)(\d+):(\d+)/$1$3{{GHGbible-ref|book=$2|chapter=$4|verse=$5}}/</p>The problem: sometimes the source text is
<p>this preposition appears in {{GHGbible-ref|book=Gn|chapter=2|verse=3}} and also in {{GHGbible-ref|book=Ru|chapter=4|verse=5}} and 4:5.</p>I want to turn this into:
<p>this preposition appears in {{GHGbible-ref|book=Gn|chapter=2|verse=3}} and also in {{GHGbible-ref|book=Ru|chapter=4|verse=5}} and {{GHGbible-ref|book=Ru|chapter=4|verse=5}}.</p>... but the previous regex turns this into
<p>this preposition appears in {{GHGbible-ref|book=Gn|chapter=2|verse=3}} and also in {{GHGbible-ref|book=Ru|chapter=4|verse=5}} and {{GHGbible-ref|book=Gn|chapter=4|verse=5}}.</p>If you don't spot the difference, then it's in the book part: I want 'Ru' and not 'Gn', i.e. the book value of the last GHGbible-ref before (\d+):(\d+), not the first one.
I probably have to modify the (.+) part so it doesn't match GHGbible-ref, or something like that, but i can't think of a way to do it.
Thanks in advance.