preg_split('/(?
function mb_str_split( $string ) {
# Split at all position not after the start: ^
# and not before the end: $
return preg_split('/(?<!^)(?!$)/u', $string );
}
$string = '火车票';
$charlist = mb_str_split( $string );
print_r( $charlist );
?>
Prints:
Array
(
[0] => 火
[1] => 车
[2] => 票
)
是PHP手册里面的一个例子,其实已经有注释了。 自己知道要区分多字节正则表达式需要加上 u 修饰符, 但是对里面的正则代表的含义不是太懂,(?<!^)(?!$) 正则具体匹配到的是那些字符?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web
技术交流群。
function mb_str_split( $string ) {
# Split at all position not after the start: ^
# and not before the end: $
return preg_split('/(?<!^)(?!$)/u', $string );
}
$string = '火车票';
$charlist = mb_str_split( $string );
print_r( $charlist );
?>
Prints:
Array
(
[0] => 火
[1] => 车
[2] => 票
)
是PHP手册里面的一个例子,其实已经有注释了。 自己知道要区分多字节正则表达式需要加上 u 修饰符, 但是对里面的正则代表的含义不是太懂,(?<!^)(?!$) 正则具体匹配到的是那些字符?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是环视,匹配位置的用法~
(?<!expr)
和(?!expr)
都是零宽断言,前者表示此位置之前不匹配expr,后者表示此位置之后不匹配expr。在正则中
^
和$
单独用表示开头和末尾。也就是说
(?<!^)
表示此位置之前不匹配开头,(?!$)
表示此位置之后不匹配末尾。所以这个split匹配到的部分,为每两个字的中间位置(但是没有匹配到任何实际的字符)。