<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000">After tons more experimenting, I figured it out! But I don't know whether it's a bug or a feature in Vedit, or proper regex behaviour (various online regex documentation didn't help at all).<br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000"> <br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000">It turns out, at least in this regex implementation, that a pair of enclosing parentheses can only serve one of two purposes, not both, at the same time. Those two purposes are:<br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000"> <br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000">1. Mark a group that can then be referred to by a variable like "\3" in the replacement string.<br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000">2. Enclose a group with alternation (regex terminology) containing several alternatives separated by the "or" operator "|".<br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000"> <br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000">Furthermore,
at least in this regex implementation, even the type-2 usage (above) increments the "\nnn" counter for variables that can be used in the replacement string, even though the matching
"\nnn" variable cannot actually be used
in the replacement string!
</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000"> <br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000">The solution I figured out (and tested - it works): Enclose the search segment in double (nested) parentheses "((" and "))", and the outer parentheses are then a type-1 usage which can be referenced in the
replacement string. But you have to make sure you use the correct
"\nnn" variable by numbering the opening parentheses "(" strictly from left to right (which is normal in regex). This unfortunately exhausts the 9 variables "\1" thru
"\9" more rapidly.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000">E.g.<br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000">Search string: abc((def|ghi))jkl\s(mn[0-9])op((qrs|tuv))xy([0-9])z<br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000">Replacement string: Can use variables \1, \3, \4, \6, but not \2, \5.<br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:#000000"> <br clear="all"></div><div><div dir="ltr" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><span style="font-family:verdana,sans-serif"><font size="2">Hartmut W Sager - Tel +1-204-339-8331<br></font></span><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, 4 Jan 2020 at 05:00, Hartmut W Sager <<a href="mailto:hwsager@marityme.net" target="_blank">hwsager@marityme.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">This might be the wrong time of night for doing regex (i.e., my mistake), or my trusty Vedit text editor has a bug in its regex implementation.<br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> <br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">Original search string: ^(From AncientBBS[1-2])\s+(Sun|Mon|Tue|Wed|Thu|Fri|Sat)[\s\,]+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+([0-9][0-9]|\s[0-9])[\s\,]+(19[0-9][0-9])[\s\,]+([0-9][0-9]\:[0-9][0-9]\:[0-9][0-9])\s*$</div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">Replacement string: <Nah, skip it><br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> <br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">The above search string gives a syntax error. I am a bit suspicious of the
([0-9][0-9]|\s[0-9]) group re operator precedence of the "or", and proceeded to stepwise simplification to narrow it down. I finally got down to:</div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> <br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">Search string: (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+([0-9])[\s\,]+</div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">
Replacement string:
\1\s0\2\s</div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> <br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">The new search works fine (as did some of the previous
stepwise simplified ones), but the replacements are baffling me.</div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">The line<br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">From AncientBBS1 Thu Jan 2, 1986 20:50:00</div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">gets changed to<br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">From AncientBBS1 Thu 02 1986 20:50:00</div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> <br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">I.e., the variable \1 seems to get lost. In my previous stepwise simplified cases, multiple variables got lost when the search worked at all.<br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> <br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">Why am I doing this? I need to massage some old BBS messages into the retarded mbox format, whose date format (on the "From " line) of "Tue Nov 05 19:02:00 1985" is particularly illogical. Be that as it may, The two sources of these messages I am processing had further sloppiness in their dates, done by some ancient BBS bozos. I did successfully fix a lot of that already with regex.<br></div><div style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> <br></div><span style="font-family:verdana,sans-serif"><font size="2">Hartmut W Sager - Tel +1-204-339-8331</font></span><br><span style="font-family:verdana,sans-serif"></span><div><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</blockquote></div></div>