正则表达式

正则表达式

PHP正则表达式替换<pre>标签外的内容

PHPllslx520 发表了文章 • 0 个评论 • 359 次浏览 • 2016-11-07 18:04 • 来自相关话题

  有时候,我们需要替换指定标签外的内容,而保留标签里面的内容不替换。比如当我们要在浏览器中显示出编辑器显示的原始格式时、需要将普通换行符“\n\r、\n、、\r”,替换为html换行标签“<br/>”,而由于“<pre>”标签中的内容自动会保留原始格式,所以不需要替换。要带到此目的,可以用下面方法:<?php
/**
* PHP 正则表达式替换指定标签外的内容
* 作者:爱E族: aiezu.com
*/
$content = <<<END
爱E族:aiezu.com
正常文本内容
需要将换行符替换成“br”换行符

<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>
END;

$content = preg_replace_callback("#(?:<pre>.+?</pre>)|(?:\n\r|\n|\r)#s", function( $match ) {
if ( strpos($match[0], '<pre>') === 0 ) {
return $match[0];
}
return "<br/>\n";
}, $content);
echo $content;输出结果:爱E族:aiezu.com<br/>
正常文本内容<br/>
需要将换行符替换成“br”换行符<br/>
<br/>
<pre>
这是pre里面的内容
换行符不替换成“br”
</pre> 查看全部
  有时候,我们需要替换指定标签外的内容,而保留标签里面的内容不替换。比如当我们要在浏览器中显示出编辑器显示的原始格式时、需要将普通换行符“\n\r、\n、、\r”,替换为html换行标签“<br/>”,而由于“<pre>”标签中的内容自动会保留原始格式,所以不需要替换。要带到此目的,可以用下面方法:
<?php
/**
* PHP 正则表达式替换指定标签外的内容
* 作者:爱E族: aiezu.com
*/
$content = <<<END
爱E族:aiezu.com
正常文本内容
需要将换行符替换成“br”换行符

<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>
END;

$content = preg_replace_callback("#(?:<pre>.+?</pre>)|(?:\n\r|\n|\r)#s", function( $match ) {
if ( strpos($match[0], '<pre>') === 0 ) {
return $match[0];
}
return "<br/>\n";
}, $content);
echo $content;
输出结果:
爱E族:aiezu.com<br/>
正常文本内容<br/>
需要将换行符替换成“br”换行符<br/>
<br/>
<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>

PHP提取字符串中的所有图片地址

回复

PHP匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 351 次浏览 • 2016-10-30 10:50 • 来自相关话题

js提取字符串中的数字

回复

Javascript匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 660 次浏览 • 2016-10-29 19:50 • 来自相关话题

PHP提取字符串中的所有汉字

回复

PHP匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 437 次浏览 • 2016-10-29 18:40 • 来自相关话题

js提取字符串中的所有汉字

回复

Javascript匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 473 次浏览 • 2016-10-29 13:19 • 来自相关话题

javascript判断字符串中指定子字符串出现的次数

回复

Javascript匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 294 次浏览 • 2016-10-29 12:35 • 来自相关话题

PHP正则表达式匹配所有ASCII字符

PHPliuliangsong 发表了文章 • 0 个评论 • 540 次浏览 • 2016-10-18 22:15 • 来自相关话题

PHP可以使用"#[[:ascii:]]#"或者"#[\x{00}-\x{ff}]#u"来匹配ASCII字符。<?php
//删除所有ascii字符
echo preg_replace("#[\x{00}-\x{ff}]#u", "", "abc!@爱E族#{}x aiezu.com");
//输出: 爱族

//删除所有非ascii字符
echo preg_replace("#[^[:ascii:]]#u", "", "abc!@爱E族#{}x aiezu.com");
//输出: abc!@E#{}x aiezu.com 查看全部
PHP可以使用"#[[:ascii:]]#"或者"#[\x{00}-\x{ff}]#u"来匹配ASCII字符。
<?php
//删除所有ascii字符
echo preg_replace("#[\x{00}-\x{ff}]#u", "", "abc!@爱E族#{}x aiezu.com");
//输出: 爱族

//删除所有非ascii字符
echo preg_replace("#[^[:ascii:]]#u", "", "abc!@爱E族#{}x aiezu.com");
//输出: abc!@E#{}x aiezu.com

中文在UTF8和GBK编码中的范围

PHPliuliangsong 发表了文章 • 0 个评论 • 675 次浏览 • 2016-10-18 16:09 • 来自相关话题

编码范围
1. GBK (GB2312/GB18030)
x00-xff GBK双字节编码范围x20-x7f ASCII字符x80-xff 中文(GBK中文范围)
xa1-xff 中文(GB2312中文范围)

2. UTF-8 (Unicode)
u4e00-u9fa5 (中文)x3130-x318F (韩文)xAC00-xD7A3 (韩文)u0800-u4e00 (日文)


正则表达式例子:
1、使用PHP语言:<?php
preg_replace("#[\x80-\xff]#", "", '爱E族:aiezu.com'); //GBK中匹配
preg_replace("#[\x{4e00}-\x{9fa5}]#", "", '爱E族:aiezu.com'); //UTF8中匹配
2、使用javascript:var str = "爱E族:aiezu.com";
str.replace(/[\u4e00-\u9fa5]/g, "");
另外一些全角英文、特殊符号等UTF8字符的编码:
uff00 - uff0f:全角字符 ＀!"#$%&'()*+,./uff10 - uff19:全角字符 0123456789uff20 - uff20:全角字符 @uff21 - uff3a:全角大写 A-Zuff3b - uff40:全角字符[\]^_`uff41 - uff5a:全角大写 a-z 查看全部
编码范围
1. GBK (GB2312/GB18030)
  • x00-xff GBK双字节编码范围
  • x20-x7f ASCII字符
  • x80-xff 中文(GBK中文范围)

  • xa1-xff 中文(GB2312中文范围)


2. UTF-8 (Unicode)
  • u4e00-u9fa5 (中文)
  • x3130-x318F (韩文)
  • xAC00-xD7A3 (韩文)
  • u0800-u4e00 (日文)



正则表达式例子:
1、使用PHP语言:
<?php
preg_replace("#[\x80-\xff]#", "", '爱E族:aiezu.com'); //GBK中匹配
preg_replace("#[\x{4e00}-\x{9fa5}]#", "", '爱E族:aiezu.com'); //UTF8中匹配

2、使用javascript:
var str = "爱E族:aiezu.com";
str.replace(/[\u4e00-\u9fa5]/g, "");

另外一些全角英文、特殊符号等UTF8字符的编码:
  • uff00 - uff0f:全角字符 ＀!"#$%&'()*+,./
  • uff10 - uff19:全角字符 0123456789
  • uff20 - uff20:全角字符 @
  • uff21 - uff3a:全角大写 A-Z
  • uff3b - uff40:全角字符[\]^_`
  • uff41 - uff5a:全角大写 a-z

php正则表达匹配中文汉字

PHPliuliangsong 发表了文章 • 0 个评论 • 1107 次浏览 • 2016-10-18 15:36 • 来自相关话题

正则匹配中文汉字根据字符编码不同而略有区别:
GBK编码 - [\x80-\xff]+ GB2312编码 - [x\a1-\xff]+UTF-8编码 - [\x{4e00}-\x{9fa5}]+/u
 
示例:
1、匹配UTF8编码字符中的汉字:<?php
// 删除字符串中所有汉字
echo preg_replace("#[\x{4e00}-\x{9fa5}]#u", "", '爱E族: aiezu.com');
// E: aiezu.com

// 删除字符串中所有非汉字字符
echo preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", '爱E族(aiezu.com)');
// 输出: 爱族 
2、匹配GB2312编码字符中的汉字:<?php
//GB2312替换中文为空,输出:Eaiezu.com
echo preg_replace("#[\xa1-\xff]+#", "", '爱E族(aiezu.com)');

//GB2312替换非中文为空,输出:爱族()
echo preg_replace("#[^\xa1-\xff]+#", "", '爱E族(aiezu.com)');
 3、匹配GBK编码字符中的汉字:<?php
// GBK编码删除中文字符,输出:Eaiezu.com
echo preg_replace("#[\x80-\xff]+#", "", '爱E族:aiezu.com');

//GBK编码删除非中文字符,输出:爱族:
echo preg_replace("#[^\x80-\xff]+#", "", '爱E族:aiezu.com'); 查看全部
正则匹配中文汉字根据字符编码不同而略有区别:
  • GBK编码 - [\x80-\xff]+ 
  • GB2312编码 - [x\a1-\xff]+
  • UTF-8编码 - [\x{4e00}-\x{9fa5}]+/u

 
示例:
1、匹配UTF8编码字符中的汉字:
<?php
// 删除字符串中所有汉字
echo preg_replace("#[\x{4e00}-\x{9fa5}]#u", "", '爱E族: aiezu.com');
// E: aiezu.com

// 删除字符串中所有非汉字字符
echo preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", '爱E族(aiezu.com)');
// 输出: 爱族
 
2、匹配GB2312编码字符中的汉字:
<?php
//GB2312替换中文为空,输出:Eaiezu.com
echo preg_replace("#[\xa1-\xff]+#", "", '爱E族(aiezu.com)');

//GB2312替换非中文为空,输出:爱族()
echo preg_replace("#[^\xa1-\xff]+#", "", '爱E族(aiezu.com)');

 3、匹配GBK编码字符中的汉字:
<?php
// GBK编码删除中文字符,输出:Eaiezu.com
echo preg_replace("#[\x80-\xff]+#", "", '爱E族:aiezu.com');

//GBK编码删除非中文字符,输出:爱族:
echo preg_replace("#[^\x80-\xff]+#", "", '爱E族:aiezu.com');

Compilation failed: invalid UTF-8 string at offset 6 in /tmp/aiezu.com.php on line 2

PHPliuliangsong 发表了文章 • 0 个评论 • 153 次浏览 • 2016-10-18 15:12 • 来自相关话题

当我们通过下面代码、使用正则表达式期望将字符串中的非汉字替换为空,这时收到一条警告信息:<?php
echo preg_replace("#[^\x4e00-\x9fa5]#u", "", '爱E族:aiezu.com');警告信息:PHP Warning: preg_replace(): Compilation failed: invalid UTF-8 string at offset 6 in /tmp/aiezu.com.php on line 2这时如何解决呢?
 
原来正则表达式中的"\x"后的UTF8编码,必须使用大括号括起来才行,如下:<?php
echo preg_replace("#[^\x{4e00}-\x{9fa5}]#u", "", '爱E族:aiezu.com');
//输出: 爱族 查看全部
当我们通过下面代码、使用正则表达式期望将字符串中的非汉字替换为空,这时收到一条警告信息:
<?php
echo preg_replace("#[^\x4e00-\x9fa5]#u", "", '爱E族:aiezu.com');
警告信息:
PHP Warning:  preg_replace(): Compilation failed: invalid UTF-8 string at offset 6 in /tmp/aiezu.com.php on line 2
这时如何解决呢?
 
原来正则表达式中的"\x"后的UTF8编码,必须使用大括号括起来才行,如下:
<?php
echo preg_replace("#[^\x{4e00}-\x{9fa5}]#u", "", '爱E族:aiezu.com');
//输出: 爱族

PHP正则表达式替换<pre>标签外的内容

PHPllslx520 发表了文章 • 0 个评论 • 359 次浏览 • 2016-11-07 18:04 • 来自相关话题

  有时候,我们需要替换指定标签外的内容,而保留标签里面的内容不替换。比如当我们要在浏览器中显示出编辑器显示的原始格式时、需要将普通换行符“\n\r、\n、、\r”,替换为html换行标签“<br/>”,而由于“<pre>”标签中的内容自动会保留原始格式,所以不需要替换。要带到此目的,可以用下面方法:<?php
/**
* PHP 正则表达式替换指定标签外的内容
* 作者:爱E族: aiezu.com
*/
$content = <<<END
爱E族:aiezu.com
正常文本内容
需要将换行符替换成“br”换行符

<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>
END;

$content = preg_replace_callback("#(?:<pre>.+?</pre>)|(?:\n\r|\n|\r)#s", function( $match ) {
if ( strpos($match[0], '<pre>') === 0 ) {
return $match[0];
}
return "<br/>\n";
}, $content);
echo $content;输出结果:爱E族:aiezu.com<br/>
正常文本内容<br/>
需要将换行符替换成“br”换行符<br/>
<br/>
<pre>
这是pre里面的内容
换行符不替换成“br”
</pre> 查看全部
  有时候,我们需要替换指定标签外的内容,而保留标签里面的内容不替换。比如当我们要在浏览器中显示出编辑器显示的原始格式时、需要将普通换行符“\n\r、\n、、\r”,替换为html换行标签“<br/>”,而由于“<pre>”标签中的内容自动会保留原始格式,所以不需要替换。要带到此目的,可以用下面方法:
<?php
/**
* PHP 正则表达式替换指定标签外的内容
* 作者:爱E族: aiezu.com
*/
$content = <<<END
爱E族:aiezu.com
正常文本内容
需要将换行符替换成“br”换行符

<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>
END;

$content = preg_replace_callback("#(?:<pre>.+?</pre>)|(?:\n\r|\n|\r)#s", function( $match ) {
if ( strpos($match[0], '<pre>') === 0 ) {
return $match[0];
}
return "<br/>\n";
}, $content);
echo $content;
输出结果:
爱E族:aiezu.com<br/>
正常文本内容<br/>
需要将换行符替换成“br”换行符<br/>
<br/>
<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>

PHP提取字符串中的所有图片地址

回复

PHP匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 351 次浏览 • 2016-10-30 10:50 • 来自相关话题

js提取字符串中的数字

回复

Javascript匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 660 次浏览 • 2016-10-29 19:50 • 来自相关话题

PHP提取字符串中的所有汉字

回复

PHP匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 437 次浏览 • 2016-10-29 18:40 • 来自相关话题

js提取字符串中的所有汉字

回复

Javascript匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 473 次浏览 • 2016-10-29 13:19 • 来自相关话题

javascript判断字符串中指定子字符串出现的次数

回复

Javascript匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 294 次浏览 • 2016-10-29 12:35 • 来自相关话题

PHP正则表达式替换<pre>标签外的内容

PHPllslx520 发表了文章 • 0 个评论 • 359 次浏览 • 2016-11-07 18:04 • 来自相关话题

  有时候,我们需要替换指定标签外的内容,而保留标签里面的内容不替换。比如当我们要在浏览器中显示出编辑器显示的原始格式时、需要将普通换行符“\n\r、\n、、\r”,替换为html换行标签“<br/>”,而由于“<pre>”标签中的内容自动会保留原始格式,所以不需要替换。要带到此目的,可以用下面方法:<?php
/**
* PHP 正则表达式替换指定标签外的内容
* 作者:爱E族: aiezu.com
*/
$content = <<<END
爱E族:aiezu.com
正常文本内容
需要将换行符替换成“br”换行符

<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>
END;

$content = preg_replace_callback("#(?:<pre>.+?</pre>)|(?:\n\r|\n|\r)#s", function( $match ) {
if ( strpos($match[0], '<pre>') === 0 ) {
return $match[0];
}
return "<br/>\n";
}, $content);
echo $content;输出结果:爱E族:aiezu.com<br/>
正常文本内容<br/>
需要将换行符替换成“br”换行符<br/>
<br/>
<pre>
这是pre里面的内容
换行符不替换成“br”
</pre> 查看全部
  有时候,我们需要替换指定标签外的内容,而保留标签里面的内容不替换。比如当我们要在浏览器中显示出编辑器显示的原始格式时、需要将普通换行符“\n\r、\n、、\r”,替换为html换行标签“<br/>”,而由于“<pre>”标签中的内容自动会保留原始格式,所以不需要替换。要带到此目的,可以用下面方法:
<?php
/**
* PHP 正则表达式替换指定标签外的内容
* 作者:爱E族: aiezu.com
*/
$content = <<<END
爱E族:aiezu.com
正常文本内容
需要将换行符替换成“br”换行符

<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>
END;

$content = preg_replace_callback("#(?:<pre>.+?</pre>)|(?:\n\r|\n|\r)#s", function( $match ) {
if ( strpos($match[0], '<pre>') === 0 ) {
return $match[0];
}
return "<br/>\n";
}, $content);
echo $content;
输出结果:
爱E族:aiezu.com<br/>
正常文本内容<br/>
需要将换行符替换成“br”换行符<br/>
<br/>
<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>

PHP正则表达式匹配所有ASCII字符

PHPliuliangsong 发表了文章 • 0 个评论 • 540 次浏览 • 2016-10-18 22:15 • 来自相关话题

PHP可以使用"#[[:ascii:]]#"或者"#[\x{00}-\x{ff}]#u"来匹配ASCII字符。<?php
//删除所有ascii字符
echo preg_replace("#[\x{00}-\x{ff}]#u", "", "abc!@爱E族#{}x aiezu.com");
//输出: 爱族

//删除所有非ascii字符
echo preg_replace("#[^[:ascii:]]#u", "", "abc!@爱E族#{}x aiezu.com");
//输出: abc!@E#{}x aiezu.com 查看全部
PHP可以使用"#[[:ascii:]]#"或者"#[\x{00}-\x{ff}]#u"来匹配ASCII字符。
<?php
//删除所有ascii字符
echo preg_replace("#[\x{00}-\x{ff}]#u", "", "abc!@爱E族#{}x aiezu.com");
//输出: 爱族

//删除所有非ascii字符
echo preg_replace("#[^[:ascii:]]#u", "", "abc!@爱E族#{}x aiezu.com");
//输出: abc!@E#{}x aiezu.com

中文在UTF8和GBK编码中的范围

PHPliuliangsong 发表了文章 • 0 个评论 • 675 次浏览 • 2016-10-18 16:09 • 来自相关话题

编码范围
1. GBK (GB2312/GB18030)
x00-xff GBK双字节编码范围x20-x7f ASCII字符x80-xff 中文(GBK中文范围)
xa1-xff 中文(GB2312中文范围)

2. UTF-8 (Unicode)
u4e00-u9fa5 (中文)x3130-x318F (韩文)xAC00-xD7A3 (韩文)u0800-u4e00 (日文)


正则表达式例子:
1、使用PHP语言:<?php
preg_replace("#[\x80-\xff]#", "", '爱E族:aiezu.com'); //GBK中匹配
preg_replace("#[\x{4e00}-\x{9fa5}]#", "", '爱E族:aiezu.com'); //UTF8中匹配
2、使用javascript:var str = "爱E族:aiezu.com";
str.replace(/[\u4e00-\u9fa5]/g, "");
另外一些全角英文、特殊符号等UTF8字符的编码:
uff00 - uff0f:全角字符 ＀!"#$%&'()*+,./uff10 - uff19:全角字符 0123456789uff20 - uff20:全角字符 @uff21 - uff3a:全角大写 A-Zuff3b - uff40:全角字符[\]^_`uff41 - uff5a:全角大写 a-z 查看全部
编码范围
1. GBK (GB2312/GB18030)
  • x00-xff GBK双字节编码范围
  • x20-x7f ASCII字符
  • x80-xff 中文(GBK中文范围)

  • xa1-xff 中文(GB2312中文范围)


2. UTF-8 (Unicode)
  • u4e00-u9fa5 (中文)
  • x3130-x318F (韩文)
  • xAC00-xD7A3 (韩文)
  • u0800-u4e00 (日文)



正则表达式例子:
1、使用PHP语言:
<?php
preg_replace("#[\x80-\xff]#", "", '爱E族:aiezu.com'); //GBK中匹配
preg_replace("#[\x{4e00}-\x{9fa5}]#", "", '爱E族:aiezu.com'); //UTF8中匹配

2、使用javascript:
var str = "爱E族:aiezu.com";
str.replace(/[\u4e00-\u9fa5]/g, "");

另外一些全角英文、特殊符号等UTF8字符的编码:
  • uff00 - uff0f:全角字符 ＀!"#$%&'()*+,./
  • uff10 - uff19:全角字符 0123456789
  • uff20 - uff20:全角字符 @
  • uff21 - uff3a:全角大写 A-Z
  • uff3b - uff40:全角字符[\]^_`
  • uff41 - uff5a:全角大写 a-z

php正则表达匹配中文汉字

PHPliuliangsong 发表了文章 • 0 个评论 • 1107 次浏览 • 2016-10-18 15:36 • 来自相关话题

正则匹配中文汉字根据字符编码不同而略有区别:
GBK编码 - [\x80-\xff]+ GB2312编码 - [x\a1-\xff]+UTF-8编码 - [\x{4e00}-\x{9fa5}]+/u
 
示例:
1、匹配UTF8编码字符中的汉字:<?php
// 删除字符串中所有汉字
echo preg_replace("#[\x{4e00}-\x{9fa5}]#u", "", '爱E族: aiezu.com');
// E: aiezu.com

// 删除字符串中所有非汉字字符
echo preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", '爱E族(aiezu.com)');
// 输出: 爱族 
2、匹配GB2312编码字符中的汉字:<?php
//GB2312替换中文为空,输出:Eaiezu.com
echo preg_replace("#[\xa1-\xff]+#", "", '爱E族(aiezu.com)');

//GB2312替换非中文为空,输出:爱族()
echo preg_replace("#[^\xa1-\xff]+#", "", '爱E族(aiezu.com)');
 3、匹配GBK编码字符中的汉字:<?php
// GBK编码删除中文字符,输出:Eaiezu.com
echo preg_replace("#[\x80-\xff]+#", "", '爱E族:aiezu.com');

//GBK编码删除非中文字符,输出:爱族:
echo preg_replace("#[^\x80-\xff]+#", "", '爱E族:aiezu.com'); 查看全部
正则匹配中文汉字根据字符编码不同而略有区别:
  • GBK编码 - [\x80-\xff]+ 
  • GB2312编码 - [x\a1-\xff]+
  • UTF-8编码 - [\x{4e00}-\x{9fa5}]+/u

 
示例:
1、匹配UTF8编码字符中的汉字:
<?php
// 删除字符串中所有汉字
echo preg_replace("#[\x{4e00}-\x{9fa5}]#u", "", '爱E族: aiezu.com');
// E: aiezu.com

// 删除字符串中所有非汉字字符
echo preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", '爱E族(aiezu.com)');
// 输出: 爱族
 
2、匹配GB2312编码字符中的汉字:
<?php
//GB2312替换中文为空,输出:Eaiezu.com
echo preg_replace("#[\xa1-\xff]+#", "", '爱E族(aiezu.com)');

//GB2312替换非中文为空,输出:爱族()
echo preg_replace("#[^\xa1-\xff]+#", "", '爱E族(aiezu.com)');

 3、匹配GBK编码字符中的汉字:
<?php
// GBK编码删除中文字符,输出:Eaiezu.com
echo preg_replace("#[\x80-\xff]+#", "", '爱E族:aiezu.com');

//GBK编码删除非中文字符,输出:爱族:
echo preg_replace("#[^\x80-\xff]+#", "", '爱E族:aiezu.com');

Compilation failed: invalid UTF-8 string at offset 6 in /tmp/aiezu.com.php on line 2

PHPliuliangsong 发表了文章 • 0 个评论 • 153 次浏览 • 2016-10-18 15:12 • 来自相关话题

当我们通过下面代码、使用正则表达式期望将字符串中的非汉字替换为空,这时收到一条警告信息:<?php
echo preg_replace("#[^\x4e00-\x9fa5]#u", "", '爱E族:aiezu.com');警告信息:PHP Warning: preg_replace(): Compilation failed: invalid UTF-8 string at offset 6 in /tmp/aiezu.com.php on line 2这时如何解决呢?
 
原来正则表达式中的"\x"后的UTF8编码,必须使用大括号括起来才行,如下:<?php
echo preg_replace("#[^\x{4e00}-\x{9fa5}]#u", "", '爱E族:aiezu.com');
//输出: 爱族 查看全部
当我们通过下面代码、使用正则表达式期望将字符串中的非汉字替换为空,这时收到一条警告信息:
<?php
echo preg_replace("#[^\x4e00-\x9fa5]#u", "", '爱E族:aiezu.com');
警告信息:
PHP Warning:  preg_replace(): Compilation failed: invalid UTF-8 string at offset 6 in /tmp/aiezu.com.php on line 2
这时如何解决呢?
 
原来正则表达式中的"\x"后的UTF8编码,必须使用大括号括起来才行,如下:
<?php
echo preg_replace("#[^\x{4e00}-\x{9fa5}]#u", "", '爱E族:aiezu.com');
//输出: 爱族

Compilation failed: character value in \x{...} sequence is too large at offset xxx

PHPliuliangsong 发表了文章 • 0 个评论 • 280 次浏览 • 2016-10-18 14:48 • 来自相关话题

当我们使用正则表达式匹配汉字时,收到一条警告信息,如:<?php
echo preg_replace("#[^\x{4e00}-\x{9fa5}]#", "", '爱E族:aiezu.com');
//抛出警告:
// PHP Warning: preg_replace(): Compilation failed: character value in \x{...} sequence is too large at offset 9 in /tmp/aiezu.com.php on line 2  这是由于我们正则表达式没加"u"模式原因,如果没加"u"模式,"\x"后的大括号中最多只能包含两个字符,范围为:"\x{00}-\x{ff}",表示匹配ascii字符,所以上面错误的解决方法就是加上"u"模式,修改后代码如下:<?php
echo preg_replace("#[^\x{4e00}-\x{9fa5}]#u", "", '爱E族:aiezu.com');
//输出: 爱族 查看全部
当我们使用正则表达式匹配汉字时,收到一条警告信息,如:
<?php
echo preg_replace("#[^\x{4e00}-\x{9fa5}]#", "", '爱E族:aiezu.com');
//抛出警告:
// PHP Warning: preg_replace(): Compilation failed: character value in \x{...} sequence is too large at offset 9 in /tmp/aiezu.com.php on line 2
  这是由于我们正则表达式没加"u"模式原因,如果没加"u"模式,"\x"后的大括号中最多只能包含两个字符,范围为:"\x{00}-\x{ff}",表示匹配ascii字符,所以上面错误的解决方法就是加上"u"模式,修改后代码如下:
<?php
echo preg_replace("#[^\x{4e00}-\x{9fa5}]#u", "", '爱E族:aiezu.com');
//输出: 爱族

Compilation failed: PCRE does not support \L, \l, \N, \U, or \u at offset 3 in xxx

PHPliuliangsong 发表了文章 • 0 个评论 • 441 次浏览 • 2016-10-18 14:18 • 来自相关话题

当我们辛辛苦苦的在网上找到匹配汉字的正则表达式拿来用时,才发现不能用,如下面代码:<?php
echo preg_replace("#[^\u4e00-\u9fa5]#", "", '爱E族:aiezu.com');代码抛出如下警告信息:PHP Warning: preg_replace(): Compilation failed: PCRE does not support \L, \l, \N, \U, or \u at offset 3 in /tmp/aiezu.com.php on line 2 
解决办法:
  原来上面代码的"\u4e00-\u9fa5"是javascript中用来匹配汉字的,在PHP中应该改成"\x"开头,并使用大括号括起来:"\x{4e00}-\x{9fa5}",并在正则表达式上使用"u"模式(UTF8模式),详见下面代码:<?php
echo preg_replace("#[^\x{4e00}-\x{9fa5}]#u", "", '爱E族:aiezu.com');
//输出结果:爱族 查看全部
当我们辛辛苦苦的在网上找到匹配汉字的正则表达式拿来用时,才发现不能用,如下面代码:
<?php
echo preg_replace("#[^\u4e00-\u9fa5]#", "", '爱E族:aiezu.com');
代码抛出如下警告信息:
PHP Warning:  preg_replace(): Compilation failed: PCRE does not support \L, \l, \N, \U, or \u at offset 3 in /tmp/aiezu.com.php on line 2
 
解决办法:
  原来上面代码的"\u4e00-\u9fa5"是javascript中用来匹配汉字的,在PHP中应该改成"\x"开头,并使用大括号括起来:"\x{4e00}-\x{9fa5}",并在正则表达式上使用"u"模式(UTF8模式),详见下面代码:
<?php
echo preg_replace("#[^\x{4e00}-\x{9fa5}]#u", "", '爱E族:aiezu.com');
//输出结果:爱族

Javascript计算字符串长度,中文长度为2,英文为1

Javascriptliuliangsong 发表了文章 • 0 个评论 • 496 次浏览 • 2016-10-18 11:46 • 来自相关话题

  使用js计算字符串长度,ASCII字符(英文、数字、字母等)长度算1,非ASCII字符(汉字等多字节字符)长度算2:
 
方法:将非ascii字符替换成两个星号,再计算长度:function abslength( str ) {
return str.replace(/[^\x00-\xff]/ig, '**').length;
}
alert(abslength("爱E族: aiezu.com")); //弹出16
这是JS版本,要使用PHP按同样规则计算字符串长度,请参考:PHP计算字符串长度,中文长度为2,英文为1 查看全部
  使用js计算字符串长度,ASCII字符(英文、数字、字母等)长度算1,非ASCII字符(汉字等多字节字符)长度算2:
 
方法:将非ascii字符替换成两个星号,再计算长度:
function abslength( str ) {
return str.replace(/[^\x00-\xff]/ig, '**').length;
}
alert(abslength("爱E族: aiezu.com")); //弹出16

这是JS版本,要使用PHP按同样规则计算字符串长度,请参考:PHP计算字符串长度,中文长度为2,英文为1

PHP计算字符串长度,中文长度为2,英文为1

PHPliuliangsong 发表了文章 • 0 个评论 • 366 次浏览 • 2016-10-18 11:19 • 来自相关话题

  PHP计算字符串长度,ASCII字符(英文、数字、字母等)长度算1,非ASCII字符(汉字等多字节字符)长度算2:
方法一:
  将非ascii字符替换成两个星号,再使用strlen计算长度:<?php
function abslength( $str ) {
return strlen(preg_replace("#[^\x{00}-\x{ff}]#u", '**', $str));
}
echo abslength("爱E族: aiezu.com"); //输出16
方法二:
  循环判断每个字符是否为ASCII字符,是则加1,否则加2:<?php
function abslength($s){
$n = 0;
preg_match_all("/./us",$s,$matchs);
foreach($matchs[0] as $p){
$n += preg_match('#^['.chr(0x1).'-'.chr(0xff).']$#',$p) ? 1 : 2;
}
return $n;
}
echo abslength("爱E族: aiezu.com"); //16 
  这是PHP版本,要使用JS按同样规则计算字符串长度,请参考:Javascript计算字符串长度,中文长度为2,英文为1 查看全部
  PHP计算字符串长度,ASCII字符(英文、数字、字母等)长度算1,非ASCII字符(汉字等多字节字符)长度算2:
方法一:
  将非ascii字符替换成两个星号,再使用strlen计算长度:
<?php
function abslength( $str ) {
return strlen(preg_replace("#[^\x{00}-\x{ff}]#u", '**', $str));
}
echo abslength("爱E族: aiezu.com"); //输出16

方法二:
  循环判断每个字符是否为ASCII字符,是则加1,否则加2:
<?php
function abslength($s){
$n = 0;
preg_match_all("/./us",$s,$matchs);
foreach($matchs[0] as $p){
$n += preg_match('#^['.chr(0x1).'-'.chr(0xff).']$#',$p) ? 1 : 2;
}
return $n;
}
echo abslength("爱E族: aiezu.com"); //16
 
  这是PHP版本,要使用JS按同样规则计算字符串长度,请参考:Javascript计算字符串长度,中文长度为2,英文为1