正则表达式的那些事(小白!)

关于这几天写php的作业,发现正则表达式真的好神奇啊,但对于我一个小白来说还是很绝望。

作业的内容是有关于匹配输入的中文数字,我搞了好几天,在网上却只能找到匹配全部中文,没有指定中文的,虽然明眼人都知道     /[中文]/   这个正则表达式就可以匹配指定的中文字符了,所以我一开始写的是   /[一二三四五六七八九十]/   这个表达式,可是还是不对,然后通过一系列百度,终于知道在正则表达式中

汉字的匹配有这个 

[\u4e00-\u9fa5]

然后我就拿过来用了呀,我的天,所以我的写法就是    /[\u4e00-\u9fa5][[一二三四五六七八九十]/  可惜还是不对,差点疯咯,因为用这个的时候报错了,因为啥呢?那是因为正则表达式中也有编码问题,我用的全局都是utf-8的编码方式所以啥不兼容的我也不太清楚,具体解决方法就是把这个汉字的匹配改为    /[\x{4e00}-\x{9fa5}]/u    这样子就可以在utf-8中匹配中文啦(关于为啥这样写就百度咯,可以了解一下)这样子我就可以匹配中文的汉字了,

然后我的作业是把中文的数字整个转换为‘***’号,所以我就这样写了  /([\x{4e00}-\x{9fa5}])[一二三四五六七八九十]+/ u 这样也倒是能够提取出中文的数字了,至于为什么有个‘+’号呢,因为没有加号的话这个表达式就会将每一个匹配的字符都换成‘***’而加了加号之后他就可以将整个几个连续的中文数字转换成‘***’ 就比如下面的意思

/([\x{4e00}-\x{9fa5}])[一二三四五六七八九十]+/ u   使用这个正则匹配  我今年二十岁 

有加号就会变成:我今年***岁

没有加号就会变成:我今年******岁

然后就当我以为我要完工的时候,突然发现,我的每一次匹配都会把数字前面的一个字符给带上就像这样

我今年二十岁--->我今***岁

我当场崩溃,这是为啥???这个问题我也搞了好久(因为我是小白。。)后来在在线测试工具上发现,当我单独匹配一个字符的时候都会带上它前面的一个字符就比如

/([\x{4e00}-\x{9fa5}])[生]+/ u

活在我的

这句话匹配出来就是 “我生”和“的我”如下:

我生在我的生

这真的是很无奈呀,这之中的原理我也是不清楚,待我以后有时间再研究吧,不过这个问题的解决方式就是

这样:/([\x{4e00}-\x{9fa5}]{0}})[生]+/ u  在中文正则的后面加了一个{0}这个就是强制它的匹配数量为单个字符得到的结果也就是:

活在我的日    这个啦!

(PS.我是个才接触的小白,真的就是想记录自己学习的过程,希望各位大佬看到有啥说的不对的地方可以指出来,求不被喷,O(∩_∩)O哈哈~)


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值