php汉字第二个字替换,php正则替换中文文字

//正则替换中文文字

$string = "中文123高深abc开心。?我们";

echo preg_replace('#(?:(?![,。?])[\xC0-\xFF][\x80-\xBF]+)+#','$0',$string);

//中文123高深abc开心。?我们

正则表达式没看懂

在网上找了一篇类似的

PHP正则表达式((?:[0-9a-zA-Z$_.`-]|[\xC2-\xDF][\x80-\xBF])+)/is是什么意思?

(?: )表示只进行分组,不进行捕获

[0-9a-zA-Z$_.`-] ——0-9、a-z、A-Z或$、_、.、`、-中的一个字符

| ——表示或者

[\xC2-\xDF][\x80-\xBF] ——用十六进制表示的字符范围【具体是什么字符不太清楚,比如汉字的范围一般是 4E00-9FA5】

+ ——前面的字符有一个或多个

(?: +) 外面的括号( )——是捕获括号。即不捕获单个匹配字符,只捕获匹配的最大字串。

/is——是PHP中正则表达式模式修饰符,其中i代表 不区分大小写,s代表:如果设定了这个修正符,那么,被匹配的字符串将视为一行来看,包括换行符,换行符将被视为普通字符串。

模式修饰符还有:m、x、e等

追问

$在什么情况下代表匹配字符串的结尾位置?

python正则和PHP正则有没有区别?

为什么$_.`-这五个符号直接输出,而不是像句号代表匹配除换行符 \n 之外的任何单字符?

十分感谢~

追答

1.$在[   ]外面表示行尾;

2.php和Python正则表达式类似;

3.[   ]中的特殊字符比较少,基本就5个[、]、\、^、-,最后两个还的看所在的位置,如果^不在中括号中第一个字符,它也没有特殊意义

正则表达式[^\x00-\xff]表示什么意思

\xnn 匹配ASCII代码中十六进制代码为nn的字符

表示匹配非单字节的字符,例如汉字,汉字符号……

单字节字符包括英文字母,数字,英文符号……排除这些剩下的也就是汉字和其他文字了

请问 php 正则中的这些是什么编码呢?

$s=preg_replace('/^([\x81-\xfe][\x40-\xfe])*/','0',$neirong);

还有这样的

preg_match("/^[\x{4e00}-\x{9fa5}]{1,4}/u",$str);

怎么又两位的 还有四位的,看样都是16进制的编码,请问这是什么编码啊?

一:[\x81-\xfe]格式的正则:

$s=preg_replace('/^([\x81-\xfe][\x40-\xfe])*/','0',$neirong); 这里面的大多是日韩文字

二:x{4e00}格式的正则:

preg_match("/^[\x{4e00}-\x{9fa5}]{1,4}/u",$str); 这里面是匹配中文;

——————————————————————————

这些字符集尤其是日文字符集的各种字、标点以及特殊符号的时候有所帮助。

UTF8

[\x01-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}

UTF16

[\x00-\xd7][\xe0-\xff]|[\xd8-\xdf][\x00-\xff]{2}

JIS

[\x20-\x7e]|[\x21-\x5f]|[\x21-\x7e]{2}

SJIS

[\x20-\x7e]|[\xa1-\xdf]|([\x81-\x9f]|[\xe0-\xef])([\x40-\x7e]|[\x80-\xfc])

EUC_JP

[\x20-\x7e]|\x81[\xa1-\xdf]|[\xa1-\xfe][\xa1-\xfe]|\x8f[\xa1-\xfe]{2}

EUC_JP标点符号及特殊字符

[\xa1-\xa2][\xa0-\xfe]

EUC_JP全角数字

\xa3[\xb0-\xb9]

EUC_JP全角大写英文

\xa3[\xc1-\xda]

EUC_JP全角小写英文

\xa3[\xe1-\xfa]

EUC_JP全角平假名

\xa4[\xa1-\xf3]

EUC_JP全角片假名 [color=Red]2007-03-12 15:00更新[/color]

\xa3[\xb0-\xb9]|\xa3[\xc1-\xda]|\xa5[\xa1-\xf6][\xa3][\xb0-\xfa]|[\xa1][\xbc-\xbe]|[\xa1][\xdd]

EUC_JP全角汉字 [color=Red]2007-03-12 15:06更新[/color]

[\xb0-\xcf][\xa0-\xd3]|[\xd0-\xf4][\xa0-\xfe]|[\xB0-\xF3][\xA1-\xFE]|[\xF4][\xA1-\xA6]|[\xA4][\xA1-\xF3]|[\xA5][\xA1-\xF6]|[\xA1][\xBC-\xBE]

Big5

[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|[\xa1-\xfe])

GBK

[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]

GB2312汉字

[\xb0-\xf7][\xa0-\xfe]

GB2312半角标点符号及特殊符号

\xa1[\xa2-\xfe]

GB2312罗马数组及项目序号

\xa2([\xa1-\xaa]|[\xb1-\xbf]|[\xc0-\xdf]|[\xe0-\xe2]|[\xe5-\xee]|[\xf1-\xfc])

GB2312全角标点及全角字母

\xa3[\xa1-\xfe]

GB2312日文平假名

\xa4[\xa1-\xf3]

GB2312日文片假名

\xa5[\xa1-\xf6]

补充:

GB18030

[\x00-\x7f]|[\x81-\xfe][\x40-\xfe]|[\x81-\xfe][\x30-\x39][\x81-\xfe][\x30-\x39]

[color=Red]2007-03-12 21:35 补充[/color]

日文半角空格

\x20

SJIS全角空格

(?:\x81\x81)

SJIS全角数字

(?:\x82[\x4f-\x58])

SJIS全角大写英文

(?:\x82[\x60-\x79])

SJIS全角小写英文

(?:\x82[\x81-\x9a])

SJIS全角平假名

(?:\x82[\x9f-\xf1])

SJIS全角平假名扩展

(?:\x82[\x9f-\xf1]|\x81[\x4a\x4b\x54\x55])

SJIS全角片假名

(?:\x83[\x40-\x96])

SJIS全角片假名扩展

(?:\x83[\x40-\x96]|\x81[\x45\x5b\x52\x53])

EUC_JP全角空格

(?:\xa1\xa1)

EUC半角片假名

(?:\x8e[\xa6-\xdf])

——————————————————————————

下面是utf-8编码的例子:

$str = "汉字";

if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {

print("该字符串全部是中文");

} else {

print("该字符串不全部是中文");

}

下面的例子包含gbk,gb2312的例子:

$action = trim($_GET['action']);

if($action == "sub")

{

$str = $_POST['dir'];

//if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str)) //GB2312汉字字母数字下划线正则表达式

if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str)) //UTF-8汉字字母数字下划线正则表达式

{

echo "您输入的[".$str."]含有违法字符";

}

else

{

echo "您输入的[".$str."]完全合法,通过!";

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值