<?php
    $str = '哈hhee12_!@#$%^&*';
    // 分割字符串
    // 暂时还不知道这两种有什么区别
    $result = preg_split('/(?<!^)(?!$)/u', $str);
    $result1 = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);

(?<!expr)(?!expr)都是零宽断言,前者表示此位置之前不匹配expr,后者表示此位置之后不匹配expr。
在正则中^和$单独用表示开头和末尾。
也就是说(?<!^)表示此位置之前不匹配开头,(?!$)表示此位置之后不匹配末尾。
所以这个split匹配到的部分,为每两个字的中间位置(但是没有匹配到任何实际的字符)。

转载自:https://segmentfault.com/q/1010000008476491

docker启动不起来,查看日志错误内容如下:

$ docker logs -f go-advertise
  1. "no such file or directory"

    $ docker logs -f go-advertise
    standard_init_linux.go:211: exec user process caused "no such file or directory"

    因为我是在Windows环境下,启动脚本是run.sh。打开git bash,设置fileformatunix

    $ vim run/sh
    
    :set ff=unix
  2. 创建不了文件夹

    $ docker logs -f go-advertise
    mkdir: can't create directory '/data/logs/': No such file or directory
    /run.sh: line 3: can't create /data/nginx/log/go-advertise.error.log: nonexistent 
    directory

    入口文件是run.sh,代码如下:

    #!/bin/sh
    mkdir -p /data/logs/golang/
    ./go-advertise start -env=dev >> /data/nginx/log/go-advertise.error.log 2>&1

    我在Dockerfile创建日志目录

    RUN mkdir -p /data/nginx/log && \n
    mkdir -p /data/logs/golang/ && \n
    touch /data/nginx/log/go-advertise.error.log

参考链接:docker启动报错:standard_init_linux.go:211: exec user process caused "no such file or directory"