PHP正则表达式问题?

查看:135
本文介绍了PHP正则表达式问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

当我使用正则表达式的时候发现了很诡异的现象,如下:

  • [­--\ˇ]

  • [­_-\ˇ]

  • [­=-\ˇ]

就是第一个不能匹配字母,第二个能匹配字母,第三个能匹配字母和斜杠

我只是希望在字符串里出现这几个特殊字符就替换,没想到连字母都替换了,我知道能用其他写法实现此需求,但我就是不知道这样写为什么会这么诡异,大神们解释下这个正则。

卧槽还有这几个,写个正则这么费劲儿

  • [+-~­­]

  • [i-~­­]

  • [--~­­]

  • [_-~­­]

  • [=-~­­]

  • ...

感兴趣就和hello w\o\r\l\d匹配测试一下。

为什么会这样?

解决方案

首先,第一个例子应该不是个合法正则,所以不会有结果。

而后面的两个例子中中的正则是最基础的 [a-z] 语法,表示匹配从一个字符到另一个字符编码之间的所有字符。

两例子中,起始字符分别是 _=, 终止字符都是全角符号 ˇ
全角符号编码大于所有 ASCII 编码,所有在匹配 AscII 编码时都匹配,不用多考虑,我们查下起始字符的 ASCII 编码。

ASCII 编码中:
/ < 0-9 < = < A-Z < \ < _ < a-z

所以, [=-\ˇ] 能匹配大写字母、反斜杠、小写字母,[_-\ˇ]只能匹配小写字母,两者都不能匹配正斜杠和数字。


其次,这么奇怪的正则还是不要写为好,很难维护。

这篇关于PHP正则表达式问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆