大哥再请教下,php截取一段字符串中第一个出现的字母或中文冒号前面的字符串的语句怎么写?

一段字符串里中文和字母数字以及全角冒号混排,想截取第一个数字或字母或全角冒号前的中文字符,如$str="登山服:pro520";php语句应该怎么写?你上次写的只有数字和... 一段字符串里中文和字母数字以及全角冒号混排,想截取第一个数字或字母或全角冒号前的中文字符,如$str="登山服:pro520"; php语句应该怎么写?你上次写的只有数字和字母的正则,加个全角冒号的话正则应该怎么写呢?
$preg = '/^([^a-z0-9]*)/i';
preg_match($preg, $str, $matchs);
echo $matchs[0];
我自己也写了个可以截取全角冒号的正则,$preg = '/^([^a-z0-9\:]*)/i'; 但是这个正则遇到第一个字的拼音是he的中文的字符串就会出错,截取不到任何中文字符,比如

$str="合金争霸";
$preg = '/^([^a-z0-9\:]*)/i';
preg_match($preg, $str, $matchs);
echo $matchs[0];
上面这个语句截取不到任何字符串,如果把“合金争霸”这四个字换成“黄金争霸”就可以正常截取,请问这是什么原因啊?
展开
 我来答
古龙朝雨3D
2013-11-05
知道答主
回答量:43
采纳率:100%
帮助的人:15.7万
展开全部
<?php
$string = "我是PHP程序员:ssbbcc";
$ff = explode(":",$string);
echo '<pre>';
print_r($ff);
echo '</pre>';
~
追问
关键是我$string的字符串是混排的,冒号可能会在字母后面,比如:$string = "我是PHP程序员ss:bbcc";
追答
把上边的两个回答结合起来呀。先用正则匹配,然后使用explode分隔全角冒号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友690c81e14
2013-11-05 · TA获得超过635个赞
知道小有建树答主
回答量:680
采纳率:0%
帮助的人:666万
展开全部
'/^([^a-z0-9:]*)/i'

再加上全角冒号就行了,正则能处理
追问
加上全角冒号之后的这个正则遇到第一个字的拼音是he或hong的中文的字符串就会出错,例如:$str=“合金争霸”; 截取不到任何字符串,如果把“合金争霸”这四个字换成“黄金争霸”就可以正常截取,请问这是什么原因啊?
追答
在gb2312编码下确实有这个问题,暂时无解
只能在用正则匹配之前先用str_replace预处理一下了,先把全角的冒号替换成半角的冒号吧,再把正则表达式里的也换成半角冒号
来自:求助得到的回答
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式