我无法用正则表达式捕捉一个奇怪的角色

时间:2017-07-10 09:34:51

标签: php regex

我在捕获和过滤掉一些数据附带的奇怪字符方面遇到了问题,这导致包含它的JSON数据无法正确解析。我不知道为什么,因为它没有包含在我用这个正则表达式创建的白名单中:

$string = preg_replace('/[^\w\dñÑáéíóúÁÉÍÓÚüܺª\-_\/\s\\<>,;:.*\[\]\(\)+?¿!&%@=]/', '', $string);

Regexr上测试正则表达式。正如您将看到的,这个奇怪的角色没有被捕获 Testing regular expression on Regexr

这是它在浏览器中的显示方式:

This is how it is displayed in the browser

这就是它在Pluma(Linux编辑器)中的显示方式:

this is how it's displayed in Pluma (a Linux editor)

例如,当我复制它并尝试将其插入Google时,不会插入任何内容。真奇怪。我从来没有遇到过这种情况。

关于如何处理它的任何想法?

2 个答案:

答案 0 :(得分:2)

这个神秘的角色并不那么神秘但很难用你的编辑器显示,因为它是破坏页面的控制字符:Form Feed \x0C参见ascii表) < / p>

此字符包含在\s字符类中,这就是您的模式与其不匹配的原因。

解决方案包括从模式中删除\s并将其替换为允许的空格字符的详尽列表。

为了简化操作,您可以放置​​包含所有水平空格的类\h(如果支持)。然后手动添加所需的垂直空白。

请注意,如果您使用的是Windows-1252代码页,请将其置于眼睛下方,以确保不会遗忘任何内容并使用字符范围缩短模式。

答案 1 :(得分:1)

我明白了!

原来这个字符代表form feed

它包含在\ s,如空格,\ t,\ r或\ n。

更具体地说,我实现了我想要的。新的正则表达式:

/[^\w\dñÑáéíóúÁÉÍÓÚüܺª\-_\/ \r\n\\<>,;:.*\[\]\(\)+?¿!&%@=]/