php中文正则
① php正则匹配出汉字
html源码中有两个“知道”,一个是标题,一个链接
我的理解,是连接里的
用(?<=<a[^>]+>)(?=(知[\w&;]+|道专[\w&;]*)?</a>)(知[\w&;]+|道[\w&;]*)?
得到的结果属是:
知 道 (中间有&-n-b-s-p;)
对这个结果,再用一次replace("",“[^\\u4e00-\\u9fa5]+”,"");就可以得到知道了。
这个我无法一次得到。
我不会php哦,不能写php代码了。也不知道对楼主的意思理解的对不。要是有问题,请楼主再描述一下。
② php正则匹配中文字符 排除符号
你指的连续,那么就要求是两个以上了:
$reg='/[x80-xff]{2,}/';
这个正则是表示匹配两个字节以上的多字节字符(多字节字符通常高位为 1)。
③ php正则匹配中文乱码问题
你编码是gbk造成的,解决方案:把需要用的页面转成utf8,如果数据库是gbk用iconv在转下码即可
④ PHP正则表达式验证是否含有中文
判断是否有中文。
if (preg_match("/[\x7f-\xff]/", $string)) { echo "true"; }else{ echo "false"; }判断是否全部是中文
//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) { //只能在GB2312情况下使用 if (preg_match("/^[\x7f-\xff]+$/", $str)) { //兼容gb2312,utf-8
echo "true";
} else {
echo "false";
}
判断中文和编码有关 gbk是双字节,utf8是三字节,可以根据中文的范围来判断
编码范围1. GBK (GB2312/GB18030)
/x00-/xff GBK双字节编码范围
/x20-/x7f ASCII
/xa1-/xff 中文
/x80-/xff 中文
2. UTF-8 (Unicode)
/一-/龥 (中文)
/x3130-/x318F (韩文
/xAC00-/xD7A3 (韩文)
/u0800-/一 (日文)
ps: 韩文是大于[/龥]的字符
正则例子:
preg_replace("/([/x80-/xff])/","",$str);
preg_replace("/([一-龥])/","",$str);
希望可以点赞,谢谢。
⑤ php怎么将中文利用正则表达式匹配出来
正则匹配中文汉字根据页面编码不同而略有区别:
GBK/GB2312编码:[x80-xff]+ 或 [xa1-xff]+
UTF-8编码:[x{4e00}-x{9fa5}]+/u
$str="账单123";
//GBK/GB2312使用:
preg_match_all("/[x80-xff]+/",$str,$chinese);
//UTF-8使用:
//preg_match_all("/[x{4e00}-x{9fa5}]+/u",$str,$chinese);
print_r($chinese);
阁下所说的乱码应该就是编码没弄对了
⑥ PHP的正则表达式中使用中文(并匹配中文)的问题,原串为UTF8
<?php
$str = "中国势力是(烟消云散、再转在、匣介)中国、类别置顶帖(来哦见好就收)、炒肉可示、需要城";
$preg2 = "/中国/sim" ;
preg_match_all($preg2, $str, $strResult, PREG_PATTERN_ORDER);
print_r($strResult);
?>
我的PHP文件是UTF-8编码,不知道你的$str是从哪里得到的呢?像上面一样,我直接给$str赋值,这样使用 /中国/sim 这个表达式没有任何问题,会不会是你$str字符串的编码与页面编码不一致呢?
⑦ php正则判断字符串是否含有中文
functionchk_cn($str){
if(preg_match('|[x{4e00}-x{9fa5}]+?|u',$str)){
returntrue;
}
returnfalse;
}
调用这个 函数,返回true则是含有中文,false则无中文。
另外,x{4e00}-x{9fa5} 这个范围我也不太确定是不是包含所有的中文范围,没有认真研究它的取值范围。
⑧ PHP正则提取中文部分内容,怎么实现呀
中文可以用正来则表达式进行源匹配,但是具体匹配方法与中文的编码方式有关:
如果是GBK(GB2312、GB1080),那么中文的编码范围是:
x80-xff
如果是UTF-8编码,那么中文的编码范围是:
u4e00-u9fa5
那么匹配汉字的正则表达式可以是:
/[x7f-xff]+/
或者
/[u4e00-u9fa5]+/
例子代码,显示文件中的所有汉字(GBK编码):
<?php
$s=file_get_contents('1.txt');
if(preg_match_all('/[x7f-xff]+/',$s,$r)){
for($i=1;$i<count($r[0]);$i++)echo"$i ".$r[0][$i]." ";
}
?>
⑨ PHP中文文字正则替换,并将匹配的中文文字加粗
<?php
$str = "中文123美丽abc开心。?我们";
echo preg_replace('#(?:(?![,。?])[xC0-xFF][x80-xBF]+)+#','<b>$0</b>',$str);
//(?:[xC0-xFF][x80-xBF]+) 单个中文字符,不需要引用,因此使用?:
//(?![,。?]) 排除中文标点符号,这里要写入中文标点
//(?:(?![,。?])[xC0-xFF][x80-xBF]+) 排除中文标点符号后的中文字符
//(?:[xC0-xFF][x80-xBF]+)+ 1个以上的中文字符
//结果 <b>中文</b>123<b>美丽</b>abc<b>开心。?我们</b>
?>
⑩ 网址中带有中文字符的php正则表达式
在中文字符出现的地方用[^`]+表示,你也可以用其它字符代替“`”,版只要中文字符内处不权可能出现的字符就行。
意思是:不是“`”字符,除了“`”的一切字符,包括中文,重复一次或多次。
为什么要这样表示中文字符的集合呢?
可能是因为在正则表达式中没有表示中文字符的字符类或集合或范围。甚至[[:print:]]+都不行!
测试如下:
<?php
$str='ffdjsfjshgfhfg<12><模式>d<括号内的部分>f符类中fs<字符类中可tryrt用的元字符为>:sjssdfsfs,sfsfjksjk,<iogfds12346789>括号内的部分';
$b='[<][^<]+[>]';//有可能出现中文字符的地方用[^<]+表示
//$b='[<][[:print:]]+[>]';
while(eregi($b,$str,$array))
{
$str_h=str_replace("<","<",$array[0]);
$str_h=str_replace(">",">",$str_h);
echo $str_h."</br>";
$str=str_replace($array[0],'',$str);
}//From J.L
?>