【正则表达式 提高】环视,中文字处理
2013-06-03 04:00
246 查看
在正则规范中,我们可能会看到(?: pattern), (?!pattern ) (?<! pattern) (?<=pattern), (?=pattern),这些叫做环视。
(?: pattern): 非捕获匹配, 说白了就是系统不会捕获这个子表达式
(?!pattern): 顺序否定环视,表示所在位置右侧不能匹配Expression
举例:(?!\|), 表示在这个位置的右侧不能出现 | , 如果出现 | 则不会匹配。
(?=pattern): 顺序肯定环视, 表示所在位置的右侧能够匹配Expression
(?<! pattern) :逆序否定环视, 表示所在位置左侧不能匹配Expression
(?<=pattern): 逆序肯定环视, 表示所在位置左侧能够匹配Expression
\x: 可以匹配中文字符
下面的程序是查找一段string中有多少中文字,有多少数字和字母。
题:结巴程序
我给出一个字符串,“我要要学学学...php”把他换成"我要学php"
(?: pattern): 非捕获匹配, 说白了就是系统不会捕获这个子表达式
(?!pattern): 顺序否定环视,表示所在位置右侧不能匹配Expression
举例:(?!\|), 表示在这个位置的右侧不能出现 | , 如果出现 | 则不会匹配。
(?=pattern): 顺序肯定环视, 表示所在位置的右侧能够匹配Expression
(?<! pattern) :逆序否定环视, 表示所在位置左侧不能匹配Expression
(?<=pattern): 逆序肯定环视, 表示所在位置左侧能够匹配Expression
//环视的举例 $regex = '/ ^host = (?<!\.)([\d.]+)(?!\.) (?#主机地址) \| ([\w!@#$%^&/*()_-+\]) (?#用户名) \| ([\w!@#$%^&*()_+\-]) (?#密码) (?!\|)$ /ix'; |
下面的程序是查找一段string中有多少中文字,有多少数字和字母。
/[\x{4e00}-\x{9fa5}]/iu
<?php //查找出游多少个汉字,多少个英文字母,多少数字 $str = "awefawe66565awefaw文字母ef"; //汉字按utf-8编码来说,它的范围是多少? 16进制 \x4e00-\x9fa5 $reg1 = '/[\x{4e00}-\x{9fa5}]/iu'; //u is utf-8 //{}: ground char form one pattern preg_match_all($reg1, $str, $res); echo "There are ".count($res[0])." Chinese letters"; echo "<pre>"; print_r($res); echo "</pre>"; //a-zA-Z $reg2 = '/[a-zA-Z]/i'; preg_match_all($reg2, $str, $res); echo "There are ".count($res[0])." Chinese letters"; echo "<pre>"; print_r($res); echo "</pre>"; //0-9 $reg3 = '/[0-9]/i'; preg_match_all($reg3, $str, $res); echo "There are ".count($res[0])." Chinese letters"; echo "<pre>"; print_r($res); echo "</pre>";
题:结巴程序
我给出一个字符串,“我要要学学学...php”把他换成"我要学php"
<?php $str = "我要要学学学...php"; //查找连续出现的相同中文字,并去匹配所有 $reg4 = '/([\x{4e00}-\x{9fa5}])\1+/iu'; preg_match_all($reg4, $str, $res); /* Array ( [0] => Array ( [0] => 要要 [1] => 学学学 ) [1] => Array ( [0] => 要 [1] => 学 ) ) */ //单独提取出res[1]中的内容作为replacement和pattern去替换str中的内容 for($i = 0; $i < count($res[1]); $i++){ $pattern = '/('.$res[1][$i].')\1+/iu'; $replacement = $res[1][$i]; $str = preg_replace($pattern, $replacement, $str); }//除去了所有结巴的中文字 //除去... //...出现的次数必须大于或者等于2次 $reg5 = '/(\.)\1+/i'; $str = preg_replace($reg5, '', $str); echo "<pre>"; print_r($str); echo "</pre>"; ?>
相关文章推荐
- 善用Pattern提高你的应用处理正则表达式的效率(Java)
- python 中的使用re 正则表达式处理文字
- 一些日文处理的正则表达式(Perl)
- python 正则表达式处理不规范json
- 使用正则表达式处理html标签方案分享
- 正则表达式在网页处理中的应用四则
- 字符串处理—正则表达式和模式匹配
- Perl语言入门笔记 第九章 用正则表达式处理文本
- PHP扩展之文本处理(二)——PCRE正则表达式语法9——重复/量词
- [VB.NET]求一个正则表达式处理一下html
- 文本处理以及正则表达式
- 文本处理三剑客--grep笔记以及正则表达式
- 掌握 PHP 中的正则表达式,第 2 部分: 如何在 PHP 中处理文本
- 网络、反射、日期处理、正则表达式测试总结FancyLab
- 在字符串处理中正则表达式中特殊字符处理
- R语言:文本(字符串)处理与正则表达式
- 正则表达式用于字符串处理
- 精通正则表达式四:环视功能
- 二:字符串和正则表达式_字符串处理
- 正则表达式之环视(lookaround)