title: regex for IPv4 matching
body: <p>I was trying to match IPv4 addresses using <code>regex</code>. I got following <code>regex</code>.</p>
  
  <p>But I am not able to understand <code>?:</code> in it.</p>
  
  <pre><code>## r'(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
  
  &gt;&gt;&gt; import re
  &gt;&gt;&gt; re.findall(r'(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)', txt)
  ['254.123.11.13', '254.123.11.14', '254.123.12.13', '254.123.12.14', '254.124.11.13', '254.124.11.14', '254.124.12.13']
  </code></pre>
  
  <p>I know <code>?:</code> is for avoiding capturing of a group, but here I am not able to make a sense with it. </p>
  
  <p><strong>Update:</strong>
  If I am removing <code>?:</code>, I am getting following result. I thought I will get IP address along with captured groups in tuples.</p>
  
  <pre><code>&gt;&gt;&gt; re.findall(r'((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)', txt)
  [('11.', '11', '13'), ('11.', '11', '14'), ('12.', '12', '13'), ('12.', '12', '14'), ('11.', '11', '13'), ('11.', '11', '14'), ('12.', '12', '13')]
  </code></pre>