preg_match:print:class匹配制表符

myn*_*etx 7 php regex preg-match

for($i = 0; $i < 255; $i++)
    if (preg_match('@[[:print:]]@', chr($i))) echo "chr($i) matches :print:<br>"; else echo "chr($i) doesnt match :print:<br>";
Run Code Online (Sandbox Code Playgroud)

在我的Windows系统上,输出为chr(9):

chr(9)匹配:print:

使用相同的代码,在Linux系统上,输出为:

chr(9)不匹配:打印:

为什么:print:该类\t仅在Windows上匹配?

  • PHP 5.5.12

hob*_*bbs 2

这可能是一个区域设置问题,但是您手上必须有一个非常时髦的区域设置。POSIX 说 no cntrlcan be print,并且 no spaceor blankcan beprint除非它是空格字符本身。在"C"语言环境中,制表符是、、 和的全部;这似乎是一个非常奇怪的地方,不会认为它是其中之一。cntrlspaceblank