<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><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>;This I understand:<br>

</div><div>;To return pattern and everything to left of first instance of pattern, use: [^&lt;pattern&gt;]*&lt;pattern&gt; ;where ^ means &#39;not&#39;; example:<br>
(car (regexp-match* #rx&quot;[^/]*/&quot; &quot;12/4/6&quot;)) ; =&gt; &quot;12/&quot;<br></div></div></blockquote><div><br></div><div>A caveat for this. &lt;pattern&gt; in the first instance isn&#39;t quite right. [...] defines a single character. [abc] for example, means a, b, or c. The ^ negates the pattern, so [^abc] means anything a, b, or c. Then * means match the proceeding pattern 0 or more times. So [^abc]* means any number of a, b, or c in any order (if you want repeating &quot;abc&quot;, you want paranthesis: #rx&quot;(abc)*&quot;). The entire point though is that if you wanted to match something like this: &quot;12abc34abc6abc7&quot;, using #rx&quot;[^abc]*abc&quot; wouldn&#39;t work. Instead of &#39;not abc than abc&#39;, you&#39;re getting &#39;anything not a or b or c then abc&#39; You&#39;d need something a bit more complicated.<br>

</div><div> <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>;This I do not understand:    <br></div><div>;To return pattern and everything left of first instance of pattern, use: .*?&lt;pattern&gt; inside #rx&quot;&quot;; where ? means _______; or where .*? means ______________; example:<br>


(car (regexp-match* #rx&quot;.*?/&quot; &quot;12/4/6&quot;)) ; =&gt; &quot;12/&quot;<br></div></div></blockquote><div><br></div><div>Technically, the interesting part there isn&#39;t .*? or just ?, but rather *?  A single dot means to match any character. .* means to match any number of characters. The problem with that is * by default is greedy. It will match the longest sequence it can. Since . is anything, the pattern #rx&quot;.*/&quot; on &quot;12/4/6&quot; will match &#39;the longest string of any character followed by a /&#39; that it can: &quot;12/4/&quot;. If you instead want a non-greedy (lazy) match, use *? or +? instead of * or +. That says, match the proceeding pattern until the next pattern matches. So it will match &#39;any character until a / is seen&#39;, so &quot;12/&quot;.<br>

<br></div><div>It doesn&#39;t particularly help that ? also has a meaning by itself. It makes the previous pattern optional. So #rx&quot;x?y&quot; matches &quot;y&quot; or &quot;xy&quot;. <br></div><div><br></div><div>Regular expressions are pretty amazingly powerful. This is a site I&#39;ve found useful in the past for looking up what things mean:<br>

</div><div><a href="http://www.regular-expressions.info/">http://www.regular-expressions.info/</a><br><br></div><div>Specifically for more information on repeating patterns (* + *? +?):<br><a href="http://www.regular-expressions.info/repeat.html">http://www.regular-expressions.info/repeat.html</a><br>

<br></div><div>Hope that helps!<br><br>JP<br></div></div></div></div>