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.


In reply to matching any string except a regex by amir_e_a

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.