首页 > 编程知识 正文

java字符串正则匹配,判断字符串是否为纯数字

时间:2023-05-04 06:10:43 阅读:143226 作者:732

grep的-v参数会查找与正则表达式不匹配的所有字符串。 那个有直接使用正则来达到同样目的的方法吗?

答案是肯定的。 利用“零宽度断言”就可以了。 但是,首先请允许我对“零宽度断言”这个概念进行说明。

我不知道是谁翻译的,听起来不是很勉强吗? 实际上,零宽度意味着匹配的部分没有长度。 例如,如果匹配一个语句中以ing结尾的词,但要求匹配结果不包含ing本身,则ing的宽度为零。 “断言”是assert (我很好奇为什么被翻译成断言),其实是验证的意思。

列举一下使用了零宽度断言的栗子。 给定一组文件名,找到jpg格式的文件名。 jpg本身不包含在内。 零宽度啊。 相对来说,你可能更熟悉JavaScript的正规规则和使用方法。 我稍后将使用JavaScript的String.prototype.match方法举例说明

var files=['foo.jpg ',' bar.png ',' baz.gif'];

files.foreach(function ) (文件)。

console.log(file.match(/^.)?=.jpg$ ()/) );

);

结果只有foo.jpg可以返回匹配结果,结果为['foo'],不包含扩展名。

(?=)称为正预测,相反,负预测是(? 表示后面没有特定的文字

file.match(/^.)? .jpg$(/

与所有文件名一致,返回['foo.jpg']、['bar.png']、['baz.gif']这样的结果。 为什么foo.jpg还匹配呢? 而且也包括扩展名吗? 仔细想想,我觉得上面的结果其实没有问题。 匹配foo.jpg,其最后一个字符g的后面也确实不是.jpg$,所以匹配也就不足为奇了。

到此为止,问题似乎不明确,即使使用负的预测,也不能选择以. jpg结尾的文件名吗? 其实再加一个条件就好了。 文件名的末尾必须是.w $,但不能是.jpg$

file.match(/^.)?=.w $ )? .jpg$(/

变更后的执行观察结果foo.jpg不再一致,一致结果中不再包含扩展名。

如上面实例所示,正预测和负预测可以合并使用。 如果不满足两个条件,就不能匹配。 即使改变上面的正预测和负预测的公式,效果也是一样的。

如果不需要检索匹配结果,而只需要知道是否匹配,则可以使正则表达式更简单。 举个有用的例子,在NGINX的设置中,如果用户访问的路径不以. php结尾,则让NGINX直接返回此文件,并添加长的缓存头信息。

location ~ . php$ ) {

expires max;

}

另外,说明如何使用正则表达式进行测试时,正则表达式实际上也有多个。 因为我们如上所述是perl样式的正则表达式,所以在grep中测试时请记住使用-P参数来启用以上正则表达式。 但是,也请注意grep的版本。 MacOS附带的grep不支持-P参数。

grep -P -e '^ (! (jpg )…) *

这个问题在segmentfault.com上进行了介绍

写累了,服务器越来越贵

寻求分担,祝好人一生平安

天使夸奖人

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。