<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoPlainText">Hello all<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">I discovered an apparent inconsistency between re:run/2 and string:slice/2 last night.  I'd appreciate any suggestions on the right way to solve.  Best illustrated by this example:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">1> S1="\rDogs".<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">"\rDogs"<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">2> S2="\r\nDogs".<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">"\r\nDogs"<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">3> {match, [{_, To1}]}=re:run(S1, "^\r").<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">{match,[{0,1}]}<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">4> {match, [{_, To2}]}=re:run(S2, "^\r\n").<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">{match,[{0,2}]}<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">5> string:slice(S1,To1).<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">"Dogs"<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">6> string:slice(S2,To2).<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">"ogs"<o:p></o:p></span></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">I’d guess this is due to string:slice treating “\r\n” as a single lexeme, whereas re:run treats it as two characters.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">What I’m trying to achieve is consistent behaviour that (a) recognises any newline (CR, LF, CRLF, …) at the start of the string and removes it.  I also need a count of the contiguous newlines found.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">As an aside, the now-obsolete string:sub_string/2 does seem to work consistently:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">7> string:sub_string(S1,To1+1).<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">"Dogs"<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">8> string:sub_string(S2,To2+1).<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"">"Dogs"</span><o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Thanks,<o:p></o:p></p>
<p class="MsoPlainText">Scott.<o:p></o:p></p>
</div>
<br>
<hr>
<font face="Arial" color="Gray" size="1"><br>
--------------------<br>
Hymans Robertson LLP is a limited liability partnership registered in<br>
England and Wales with registered number OC310282. A list of<br>
members of Hymans Robertson LLP is available for inspection at One<br>
London Wall, London, EC2Y 5EA, the firm's registered office. Hymans<br>
Robertson LLP is authorised and regulated by the Financial Conduct<br>
Authority and licensed by the Institute and Faculty of Actuaries for<br>
a range of investment business activities.<br>
<br>
This e-mail and any attachments are confidential. If it is not intended for<br>
you then please tell us and respect that confidentiality. E-mails and<br>
attachments can be corrupted or altered after sending: if you rely on<br>
advice or product transmitted by e-mail then you do so at your own<br>
risk. This footnote also confirms that this email message has been swept<br>
for the presence of computer viruses.<br>
<br>
Visit <a href="http://www.hymans.co.uk/information/privacy-notice/">hymans.co.uk/information/privacy-notice/</a> for<br>
details of how we use your personal information.<br>
--------------------<br>
</font>
</body>
</html>