我在自定义的脚本中找到了此正则表达式。有人可以告诉我它在做什么吗?

function test( $text) {
    $regex = '/( [\x00-\x7F] | [\xC0-\xDF][\x80-\xBF] | [\xE0-\xEF][\x80-\xBF]{2} | [\xF0-\xF7][\x80-\xBF]{3} ) | ./x';
    return preg_replace($regex, '$1', $text);
}

最佳答案

在捕获组内部,有四个选项:

  • [\x00-\x7F]
  • [\xC0-\xDF][\x80-\xBF]
  • [\xE0-\xEF][\x80-\xBF]{2}
  • [\xF0-\xF7][\x80-\xBF]{3}

  • 如果这些模式在给定位置都不匹配,那么任何字符都将被捕获组之外的.匹配。
    preg_replace调用将遍历$text来查找所有不重叠的匹配项,并用捕获的内容替换每个匹配项。

    这里有两种可能性,要么整个匹配项都在捕获组内,所以替换项不会更改$text,要么末尾的.与单个字符匹配,然后将该字符从$text中删除。

    以下是一些基本示例:
  • 如果文本中出现\xF8-\xFF范围内的字符,它将始终被删除
  • 除非后跟\xC0-\xDF中的字符,否则\x80-\xBF中的字符将被删除
  • 除非后跟\xE0-\xEF中的两个字符,否则\x80-\xBF中的字符将被删除
  • 除非删除\xF0-\xF7中的三个字符,否则\x80-\xBF中的字符将被删除
  • 除非与上述情况之一匹配,否则\x80-\xBF中的字符将被删除
  • 关于php - 这个正则表达式在做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7096303/

    10-09 01:00