Home  >  Article  >  Backend Development  >  php正则匹配汉字结尾的字符串

php正则匹配汉字结尾的字符串

WBOY
WBOYOriginal
2016-06-23 14:12:501622browse

本帖最后由 zhuzhaodan 于 2013-06-09 00:04:00 编辑

UTF-8格式
$str = "289dfh第一个匹配     jdfh388第二个匹配  jfsj83第三个匹配 sjfsui"
要匹配出 1)289dfh第一个匹配
         2)jdfh388第二个匹配
         3)jfsj83第三个匹配

回复讨论(解决方案)

本帖最后由 xuzuning 于 2013-06-09 07:05:36 编辑

$str = "289dfh第一个匹配     jdfh388第二个匹配  jfsj83第三个匹配 sjfsui";preg_match_all('/\w+[\x{4e00}-\x{9fa5}]/iu', $str, $r);print_r($r[0]);
Array
(
    [0] => 289dfh第一个匹配
    [1] => jdfh388第二个匹配
    [2] => jfsj83第三个匹配
)

我想用环视做,左边不以汉字开头做界,右边以汉字结尾做界,这样怎么写呢?

<?php$str = "289dfh第一个匹配     jdfh388第二个匹配  jfsj83第三个匹配 sjfsui   汉字开头的不要    haha这个要";preg_match_all('/\s*(?![\x{4e00}-\x{9fa5}])\w+[\x{4e00}-\x{9fa5}]+/iu', $str, $r);print_r($r[0]);


你指的是这个不?
否定顺序环就可以啦 ~~~

我想用环视做,左边不以汉字开头做界,右边以汉字结尾做界,这样怎么写呢?

你这个是黑名单做法,范围太大了,应该改用白名单,规定开头是什么才对

<?php$str = "289dfh第一个匹配     jdfh388第二个匹配  jfsj83第三个匹配 sjfsui   汉字开头的不要    haha这个要";preg_match_all('/\s*(?![\x{4e00}-\x{9fa5}])\w+[\x{4e00}-\x{9fa5}]+/iu', $str, $r);print_r($r[0]);


你指的是这个不?
否定顺序环就可以啦 ~~~

为什么把结尾的/iu去掉,会报错
Compilation failed: character value in \x{...} sequence is too large at offset 8

/iu

i表示忽略大小写
u表示utf8

/iu

i表示忽略大小写
u表示utf8

把U去掉,显示错误,为什么不指定U,就错误啊

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn