php正则匹配中文
㈠ php正则表达式中怎么匹配汉字啊 - 技术问答
匹配中文字符的正则表达式:
[\\u4e00-\\u9fa5]匹配双字节字符(包括汉字在内):[^\\x00-\\xff]应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){return
this.replace([^\\x00-\\xff]/g,\"aa\").length;}匹配空行的正则表达式:\\n[\\s|
]*\\r匹配HTML标记的正则表达式:/.*|/匹配首尾空格的正则表达式:(^\\s*)|(\\s*$)
㈡ 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正则表达式匹配(字母、数字、汉字、下划线)
<?php
$pat='#^([a-zA-Z]+|[0-9]+|[x{4e00}-x{9fa5}]+)$#u';
$s="你好";
var_mp(preg_match($pat,$s));
㈣ PHP正则匹配汉字和半角逗号,开头和结尾禁止半角逗号、禁止连续两个半角逗号。自己没知道OK的,就不要答了
匹配汉字其实与编码有关系的,UTF8的正则与GBK的正则就会有差别。
我按你的要求改了一个在UTF-8编码下匹配的,但还没达到禁止连续两个半角逗号的要求。你可以先看看,看看有没有启发。
$str = "汉,中国,人,字";
if (preg_match("/^[^,][\x{4e00}-\x{9fa5},]+[^,]$/u",$str)) {
print("合法");
} else {
print("不合法");
}
============
如果未能解决两个半角逗号的问题,其他楼主也可以降低一下要求,分两次处理。第一次先替换掉双半解逗号为一个,再使用正则来匹配。
能解决问题是关键,方法可以再优化,对不?
㈤ UTF-8正则表达式如何匹配汉字,utf-8正则表达式_PHP教程
判断输入内容是否含有违法字符,请看下面代码
$str = "编程";
if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
echo "您输入的[".$str."]含有违法字符";
}
else
{
echo "您输入的[".$str."]完全合法,通过!";
}
-----------------------
UTF-8匹配:在javascript中,要判断字符串是中文是很简单的。
比如:
代码如下:
var str = "php编程";
if (/^[\u4e00-\u9fa5]+$/.test(str))
{
alert("该字符串全部是中文");
}
else
{
alert("该字符串不全部是中文");
}
php中,是用\x表示十六进制数据的。
于是,变换成如下的代码:
代码如下:
$str = "php编程";
if (preg_match("/^[\x4e00-\x9fa5]+$/",$str))
{
print("该字符串全部是中文");
}
else
{
print("该字符串不全部是中文");
}
貌似不报错了,判断的结果也正确,不过把$str换成“编程”两字,结果却还是显示“该字符串不全部是中文”,看来这样的判断还是不够准确。
重要:
查阅了《精通正则表达式》发现,对于[\x4e00-\x9fa5]这块东西,自己做一个强化的解释php的正则中, [\x4e00-\x9fa5],其实就是 字符和字符组的概念, \x{hex},表达一个16进制数, 需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必须加上大括号,同时,如果是大于x{FF}的hex,必须和u 修饰符连用,不然会非法出错
网上只能找到匹配全角字符的正则: ^[\x80-\xff]*^/ ,这里可以不加大括号 [\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持 不过,既然\x表示的十六进制数据,为什么和js里边提供的范围\x4e00-\x9fa5不一样呢?
于是我就换成了下边的代码,发现真的准确了:
代码如下:
$str = "php编程";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
print("该字符串全部是中文");
}
else
{
print("该字符串不全部是中文");
}
知道了php中utf-8编码下用正则表达式匹配汉字的最终正确表达式——/^[\x{4e00}-\x{9fa5}]+$/u, 参考以上文章写了如下一段测试代码(复制以下代码保存成.php文件)
<?php
$action = trim($_GET['action']);
if($action == "sub")
{
$str = $_POST['dir'];
if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str))
{
echo "您输入的[".$str."]含有违法字符";
}
else
{
echo "您输入的[".$str."]完全合法,通过!";
}
}
GBK:
代码如下:
preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312汉字字母数字下划线正则表达式
以上内容就是PHP中UTF-8正则表达式如何匹配汉字的全部内容,希望大家喜欢。
㈥ 怎么用php正则获得a标签内的文字啊
php中正则匹配只要使用这两个函数:
preg_match_all
preg_match
这里使用preg_match_all,代码如下:
$subject='<ahref="xxx.php">abc测试</a>';//假设这是需要匹配的字符串
$pattern='/<ahref="[^"]*"[^>]*>(.*)</a>/';//这是匹配的正则表达式
preg_match_all($pattern,$subject,$matches);//开始匹配,该函数会把匹配结果放入$matches数组中
echo"<pre>";
print_r($matches);
/**
结果是:
Array
(
[0]=>Array
(
[0]=>abc测试
)
[1]=>Array
(
[0]=>abc测试
)
)
*/
㈦ php模拟登陆抓取数据,无法用正则表达式匹配中文
header()函数是输出到HTTP头,和你这个问题是没有关系的。
真正相关的,是你的源代码的编码方式。
我举个例子,若源代码文件是采用UTF8编码,那么你在抓取到页面后,先要进行编码转换到UTF8!
如,使用iconv:
若抓取到的页面存放在$contents中:那么运行$contents=iconv('gb2312','utf-8//IGNORE',$contents);//参数中的IGNORE是忽略错误
这样再进行正则匹配才行。
当然匹配出来的结果也需要用UTF8来正常显示,所以header()那部分就不用去掉了。
㈧ php正则表达式匹配一段中文,中间有换行,空白,应该怎么写
有多种处理方法:
1、使用[sS]匹配任意字符,而不是使用“.”
2、使用s单行修饰模式,例:$pattern='#abc.*?def#s';//能匹配abc换行def
3、使用s*匹配换行和空格,php里s能匹配空白字符,含换行
php里的中文使用[x7f-xff]表示,因此,使用正则:
$pattern='#[x7f-xff]+(?:s*[x7f-xff]+)*#';即可
㈨ PHP正则表达,汉字大小写字母数字下划线以及@符号
邮箱的正则表达式为:/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$/,其他的一楼已经回答得很完备了