PHP正则表达式问题?
阿神
阿神 2017-05-16 13:07:23
0
1
377

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

  • [­--\ˇ]

  • [­_-\ˇ]

  • [­=-\ˇ]

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

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

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

  • [+-~­­]

  • [i-~­­]

  • [--~­­]

  • [_-~­­]

  • [=-~­­]

  • ...

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

为什么会这样?

阿神
阿神

闭关修行中......

membalas semua(1)
我想大声告诉你

Pertama sekali, contoh pertama tidak sepatutnya menjadi undang-undang tetap, jadi tidak akan ada hasilnya.

Ungkapan biasa dalam dua contoh seterusnya ialah sintaks [a-z] yang paling asas, yang bermaksud memadankan semua aksara daripada satu aksara kepada pengekodan aksara yang lain. [a-z] 语法,表示匹配从一个字符到另一个字符编码之间的所有字符。

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

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

所以, [=-ˇ] 能匹配大写字母、反斜杠、小写字母,[_-ˇ]

Dalam dua contoh, aksara permulaan ialah _ dan =, dan aksara yang berakhir adalah semua simbol lebar penuh ˇ.
Pengekodan simbol lebar penuh adalah lebih besar daripada semua pengekodan ASCII, dan semuanya dipadankan apabila memadankan pengekodan AscII Tanpa berfikir panjang, kami menyemak pengekodan ASCII bagi aksara permulaan.

Pengekodan ASCII:
/ 0-9 < kod> < _ <

Jadi, [=-ˇ] boleh memadankan huruf besar, garis miring ke belakang dan huruf kecil, dan [_-ˇ] hanya boleh memadankan huruf kecil, kedua-duanya tidak boleh dipadankan. 🎜 🎜 🎜Kedua, adalah lebih baik untuk tidak menulis ungkapan biasa yang pelik, kerana ia sukar untuk dikekalkan. 🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!