<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hello,</p>
    <p>the regular expressions in textops have to be POSIX format
      (extended, iirc), the remark for perl/sed-like was referring to
      the format being '/match/replace/flags' that is common for Perl
      scripting and sed parameters.</p>
    <p>Practically textops uses the regex functions from libc, does not
      depend on libpcre that offers PCRE format for expressions.</p>
    <p>The regex supports matching with PCRE and dialplan offers a way
      to do substitutions by matching with PCRE library.</p>
    <p>I updated the readme of textops to reflect somehow better the
      above.</p>
    <p>Cheers,<br>
      Daniel<br>
    </p>
    <div class="moz-cite-prefix">On 04.10.21 19:50, Joel Serrano wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAMtXxQn6LftHB=WFtTZe41hSWAv+k2Pixzcu9JPw1F_tTqgFfQ@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">So now when combined with subst_hf to actually edit
        the header value, I'm getting this error:
        <div><br>
        </div>
        <div>Oct  4 10:44:44 kamailio-n1 kamailio[20324]: ERROR:
          <core> [core/re.c:363]: replace_build(): Buffer too
          small<br>
          Oct  4 10:44:44 kamailio-n1 kamailio[20324]: ERROR: textops
          [textops.c:3110]: subst_hf_f(): textops subst_run failed<br>
        </div>
        <div><br>
        </div>
        <div>Can anyone remind me the name of the parameter I have to
          adjust to increase the buffer size?</div>
        <div><br>
        </div>
        <div>Thanks, </div>
        <div>Joel.</div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Mon, Oct 4, 2021 at 10:46
          AM Joel Serrano <<a href="mailto:joel@textplus.com"
            moz-do-not-send="true">joel@textplus.com</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">Update:
            <div><br>
            </div>
            <div>I managed to achieve it using the "regex" module with
              "pcre_match()", that will take negative lookahead nicely.</div>
            <div><br>
            </div>
            <div><br>
            </div>
          </div>
          <br>
          <div class="gmail_quote">
            <div dir="ltr" class="gmail_attr">On Mon, Oct 4, 2021 at
              10:18 AM Joel Serrano <<a
                href="mailto:joel@textplus.com" target="_blank"
                moz-do-not-send="true">joel@textplus.com</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">Hey guys, 
                <div><br>
                </div>
                <div>I'm trying to do a replacement regex using subst_hf
                  but I can't seem to get the format right and the docs
                  are confusing.</div>
                <div><br>
                </div>
                <div>
                  <div><b>subst_hf: </b>docs say it uses perl-like regex
                    (as I understand it, that would mean PCRE). Docs
                    also say in the 'subexp' param that it uses the same
                    format as <b>subst.</b><br>
                  </div>
                  <div><b><br>
                    </b></div>
                  <div><b>subst: </b>at the beginning it says it uses
                    perl or sed format, but in the '/re/repl/flags'
                    param it says that sed format.</div>
                </div>
                <div><br>
                </div>
                <div><a
href="https://www.kamailio.org/docs/modules/devel/modules/textops.html#textops.f.subst_hf"
                    target="_blank" moz-do-not-send="true">https://www.kamailio.org/docs/modules/devel/modules/textops.html#textops.f.subst_hf</a><br>
                </div>
                <div><br>
                </div>
                <div>
                  <div
style="color:rgb(0,0,0);font-family:Helvetica,Arial,sans-serif;font-size:15px">
                    <div>
                      <div>
                        <h3 style="margin:1em 0px 0.75em;padding:0px 0px
                          5px
5px;color:rgb(107,83,68);font-family:Scada,Helvetica,sans-serif;font-size:20px;line-height:28px;font-style:italic">4.20.  <code>subst_hf(hf,
                            subexp, flags)</code></h3>
                      </div>
                    </div>
                  </div>
                  <p
style="font-family:Helvetica,Arial,sans-serif;text-align:justify;font-size:15px"><font
                      color="#ff0000">Perl-like substitutions</font><span
                      style="color:rgb(0,0,0)"> in the body of a header
                      field.</span></p>
                  <p
style="font-family:Helvetica,Arial,sans-serif;text-align:justify;color:rgb(0,0,0);font-size:15px">Meaning
                    of the parameters is as follows:</p>
                  <div
                    style="font-family:Helvetica,Arial,sans-serif;font-size:15px">
                    <ul type="disc">
                      <li style="color:rgb(0,0,0)">
                        <p style="text-align:justify"><span><em>hf</em></span> -
                          header field name.</p>
                      </li>
                      <li>
                        <p style="text-align:justify"><span
                            style="color:rgb(0,0,0)"><em>subexp</em></span><font
                            color="#000000"> - substitution expression </font><font
                            color="#ff0000">in the same format as of the
                            'subst' function</font><font color="#000000">
                            parameter.</font></p>
                      </li>
                      <li style="color:rgb(0,0,0)">
                        <p style="text-align:justify"><span><em>flags</em></span> -
                          control flags - it has to be one of: a - all
                          headers matching the name; f - only first
                          header matching the name; l - only the last
                          header matching the name.</p>
                      </li>
                    </ul>
                  </div>
                </div>
                <div><br>
                </div>
                <div>
                  <div
style="color:rgb(0,0,0);font-family:Helvetica,Arial,sans-serif;font-size:15px">
                    <div>
                      <div>
                        <h3 style="margin:1em 0px 0.75em;padding:0px 0px
                          5px
5px;color:rgb(107,83,68);font-family:Scada,Helvetica,sans-serif;font-size:20px;line-height:28px;font-style:italic">4.16.  <code>subst('/re/repl/flags')</code></h3>
                      </div>
                    </div>
                  </div>
                  <p
style="font-family:Helvetica,Arial,sans-serif;text-align:justify;font-size:15px"><span
                      style="color:rgb(0,0,0)">Replaces re with repl (</span><font
                      color="#ff0000">sed or perl like</font><font
                      color="#000000">).</font></p>
                  <p
style="font-family:Helvetica,Arial,sans-serif;text-align:justify;color:rgb(0,0,0);font-size:15px">Meaning
                    of the parameters is as follows:</p>
                  <div
                    style="font-family:Helvetica,Arial,sans-serif;font-size:15px">
                    <ul type="disc">
                      <li>
                        <p style="text-align:justify"><span
                            style="color:rgb(0,0,0)"><em>'/re/repl/flags'</em></span><font
                            color="#000000"> - </font><font
                            color="#ff0000">sed like regular expression</font><font
                            color="#000000">. flags can be a combination
                            of i (case insensitive), g (global) or s
                            (match newline don't treat it as end of
                            line).</font></p>
                        <p style="color:rgb(0,0,0);text-align:justify">'re'
                          - is regular expression</p>
                        <p style="color:rgb(0,0,0);text-align:justify">'repl'
                          - is replacement string - may contain
                          pseudo-variables</p>
                        <p style="color:rgb(0,0,0);text-align:justify">'flags'
                          - substitution flags (i - ignore case, g -
                          global)</p>
                      </li>
                    </ul>
                  </div>
                </div>
                <div><br>
                </div>
                <div><br>
                </div>
                <div><br>
                </div>
                <div><br>
                </div>
                <div>I'm trying to use this:</div>
                <div><br>
                </div>
                <div>subst_hf("X-myheader", "/^(?!string1
                  |example2-|text3 )(.*)/myprefix \1/", "a")<br>
                </div>
                <div><br>
                </div>
                <div>In an online tester using PCRE, the format is
                  correct, but Kamailio doesn't like it:</div>
                <div><br>
                </div>
                <div>Oct  4 09:29:16 cops-n1 cops[15957]: ERROR:
                  <core> [core/re.c:285]: subst_parser(): bad
                  regular expression ^(?!string1 |example2-|text3 )(.*)
                  in /^(?!string1 |example2-|text3 )(.*)/myprefix \1/<br>
                </div>
                <div><br>
                </div>
                <div><br>
                </div>
                <div>If I remove the negative lookahead chars (?!) then
                  kamailio doesn't complain but the regex doesn't do
                  what I want.</div>
                <div><br>
                </div>
                <div>Does this mean that Kamailio won't support negative
                  lookahead for subst regex replacements?</div>
                <div><br>
                </div>
                <div>What I'm trying to achieve is something along:</div>
                <div><br>
                </div>
                <div>"If the value of the header Myheader doesn't start
                  with ABC, DEF or HIJ, then prefix it with XYZ"</div>
                <div><br>
                </div>
                <div>Any suggestions/ideas on how to achieve this?</div>
                <div><br>
                </div>
                <div><br>
                </div>
                <div>Thanks, </div>
                <div>Joel.</div>
                <div><br>
                </div>
                <div><br>
                </div>
                <div><br>
                </div>
              </div>
            </blockquote>
          </div>
        </blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
  * <a class="moz-txt-link-abbreviated" href="mailto:sr-users@lists.kamailio.org">sr-users@lists.kamailio.org</a>
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
  * <a class="moz-txt-link-freetext" href="https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users">https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users</a>
</pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Daniel-Constantin Mierla -- <a class="moz-txt-link-abbreviated" href="http://www.asipto.com">www.asipto.com</a>
<a class="moz-txt-link-abbreviated" href="http://www.twitter.com/miconda">www.twitter.com/miconda</a> -- <a class="moz-txt-link-abbreviated" href="http://www.linkedin.com/in/miconda">www.linkedin.com/in/miconda</a>
Kamailio Advanced Training - Online
Nov 08-11, 2021 (Europe Timezone) - Nov 22-25, 2021 (America Timezone)
  * <a class="moz-txt-link-freetext" href="https://www.asipto.com/sw/kamailio-advanced-training-online/">https://www.asipto.com/sw/kamailio-advanced-training-online/</a></pre>
  </body>
</html>