标签:一个 没有 包括 自己 种类 整数 word 问题 单词
首先,明白几个边界匹配器字符的含义。
^:整行字符串的开头位置
\A:整段字符串的开头位置
$:整行字符串的结尾位置
\z:整段字符串的结尾位置
关于\b和\B,官方原版的解释中是A word boundary和A non-word boundary,没有详细的解释,反正我是没看明白,自己测试一下,匹配字符串:6lo.ve,正则表达式:\B\D。结果共三处,包括l、o、v 三个字母。
那么我们是不是可以认为\B\D表示:匹配一个任意非数字的字符,并且字符的前一位是字母或者数字,此时这个单词不是边界单词;\b\D表示:匹配一个任意非数字的字符,并且字符的前一位不是字母或者数字,此时是一个边界单词。
再来说说数字的匹配,先来一个示例字符串:"78.64java23.678love98py3.4.5c78c++144vv7vv12..12r45v.56v56."
最简单的正则表达式为:[0-9]+(\.[0-9]+)?,可以匹配绝大多数的结果,但是如果字符串中包括3.4.5、12..12、.56、78.这种数字的,会被匹配出来3.4、5,12、12,56,78。
那我们是不是能把这几个特殊的去除掉呢?后来又想到一种匹配规则:[0-9]+\.{0,1}[0-9]+\.{0}[0-9],你有没有发现这个匹配是有点问题的,你来看啊:
.前面的数字是一个或者多个,后面的数字也是一个或者多个;.后面的数字是一位,也就是说。也就是说,这个规则匹配到的数字至少是三位整数,如果带有小数的话,至少要带有两位小数(整数位至少也要保证一个位数)
假设字符串里面除了字母、数字和小数点不再包含别的东西,那么我们是不是可以试试另外一种匹配模式:\B[0-9]+\.{0,1}[0-9]+\B,这个匹配中\B表示数字旁边的必定是一个单词(即数字或者字母),这样就可以排除掉3.4.5、12..12、.56、56.这种类型的数字,但是这个也有一些缺点:
78.64会变成8.64,这个问题可以通过在字符串两边各加一个字母解决掉。暂时爬坑到这里,后续有进展接着更新...
标签:一个 没有 包括 自己 种类 整数 word 问题 单词
原文地址:https://www.cnblogs.com/tudou1179006580/p/11100155.html