通宇老海 發表於 2022-5-27 11:32:24

利用正则表达式匹配浮点型数据

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">前言:</a></li><li><a href="#_label1">正则表达式</a></li><li><a href="#_label2">Java代码</a></li><li><a href="#_label3">附:正则表达式(同时匹配整型数和浮点数)</a></li><li><a href="#_label4">总结</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>前言:</h2>
<p>在开发中我们常常会使用到正则表达式,但很奇怪的是,每次你在使用正则表达式的时候你都发现你不会写,不知道语法,可能你大概还记得一部分,但很模糊,对于正则表达式的语法真心记不住,别的程序猿是不是我不清楚,但我是就是这样子,每次写都会发现记不住了,然后又去网上查找资料,又进行一次学习,慢慢的发现基本语法你又会了,但实际上你还是不会,可能是没有完全明白或者在实际开发中没有长期的使用导致,今天写这篇文章纯属唠嗑,其余的差不多都是复制粘贴了,另外说一下最近这一次翻开正则表达式去匹配浮点型数据做的一点思路,这一点和之前的是不一样的。以前写的正则去匹配浮点型的时候会发现无法完全正确的匹配,找了网上不少的高手或者菜鸟教程直接抄过来使用,发现其实都是有问题的,问题出在哪儿呢,大部分出现的问题都是在处理&quot;0&quot;和&quot;.&ldquo;的情况下。你可能忘记了,我可以帮大家会议一下,当然大部分还是对的,但是如果出现以0开头的时候,你会发现,我可以输入n个0开头也能匹配出来,虽然有点会把连续的多个0开头的部分丢掉,但还是让人感觉匹配的不是很好,我有强迫症,这种匹配我认为是不正确的,另外就是&rdquo;.&quot;,当你使用&quot;.&quot;的时候,你会发现&quot;xxxx.&quot;像这种格式的都能匹配,这是在逗我吗,难道这也算正确的,这种情况我会直接否认掉,但是在以往的开发中,我为了完后任务,当然也就不管了,没那么严格,对于上面出现的这几种情况我都心有不甘的默认了,毕竟开发需要的时间不能都花在搞这种问题上,时间那么有限,所以我当然就默许了这种问题的存在。今天呢又来搞了搞正则,还是相同的东西,我想自己写了,所以自己开搞了,废话有点多了,接下来就进入主题吧。</p>
<p class="maodian"><a name="_label1"></a></p><h2>正则表达式</h2>
<p>1、非负浮点型:(^\d*\.\d+$|^0\.\d+$|^\d*$|^0$)</p>
<p>2、浮点型:(^-?\d*\.\d+$|^-?0\.\d+$|^-?\d*$|^0$)</p>
<p>上面的正则是怎么写的呢?我来讲一讲</p>
<p>将浮点型数据做拆分,为啥要拆分呢,因为不拆分很难实现匹配浮点型字符串的正确格式</p>
<p>拆分成4类</p>
<blockquote><p>1、非0开头的浮点型(123.12)<br />2、0开头的浮点型(0.12)<br />3、非0整数型<br />4、0</p></blockquote>
<p>分别正则表达式</p>
<blockquote><p>1、^\d*\.\d+$<br />2、^0\.\d+$<br />3、^\d*$<br />4、^0$</p></blockquote>
<p>最后将4个表达式组合到一个中就得到最终的结果</p>
<blockquote><p>(^\d*\.\d+$|^0\.\d+$|^\d*$|^0$)</p></blockquote>
<p>浮点型是存在正负数的,所以还需要给得到的正则表达式添加符号</p>
<blockquote><p>(^-?\d*\.\d+$|^-?0\.\d+$|^-?\d*$|^0$)</p></blockquote>
<p>语法解析</p>
<table><thead><tr><th>符号</th><th>描述</th></tr></thead><tbody><tr><td>^</td><td>以什么开头</td></tr><tr><td>$</td><td>以什么结尾</td></tr><tr><td>.</td><td>匹配任意非\n的单字符</td></tr><tr><td>\.</td><td>匹配.</td></tr><tr><td>+</td><td>匹配一次或多次</td></tr><tr><td>*</td><td>匹配0次或多次</td></tr><tr><td>?</td><td>匹配0次或1次</td></tr><tr><td>x|y</td><td>表示匹配x或者y</td></tr><tr><td>{n}</td><td>表示匹配n次</td></tr><tr><td></td><td>表示范围1至9的任意1个数字</td></tr><tr><td>()</td><td>强制优先级,匹配括号需要在括号前加&quot;\&quot;</td></tr><tr><td>-</td><td>表示负号</td></tr></tbody></table>
<p class="maodian"><a name="_label2"></a></p><h2>Java代码</h2>
<div class="jb51code"><pre class="brush:java;">import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {
        public static void main(String args[]) {
                String str = "";
                String pattern = "(^\\d*\\.\\d+$|^0\\.\\d+$|^\\d*$|^0$)";

                Pattern r = Pattern.compile(pattern);
                Matcher m = r.matcher(str);
                System.out.println(m.matches());
        }

}
</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>附:正则表达式(同时匹配整型数和浮点数)</h2>
<blockquote><p>pattern=&quot;^*?(\.{1,2})?$&quot;</p></blockquote>
<p class="maodian"><a name="_label4"></a></p><h2>总结</h2>
頁: [1]
查看完整版本: 利用正则表达式匹配浮点型数据