注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

Python,PHP 正则修饰符、中文问题  

2011-12-22 10:07:00|  分类: Web技术-正则表达 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Python,PHP 正则修饰符、中文问题


python正则修饰符(来自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html)

re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同) 

M(MULTILINE): 多行模式,改变'^'和'$'的行为

S(DOTALL): 点任意匹配模式,改变'.'的行为 

L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定 

U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性 

X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。以下两个正则表达式是等价的: 

eg:

import re

patt = re.compile(r'^.*?\w+$',re.I|re.S)

 


PHP 正则修饰符 

格式:/regexp/ modifier
详细说明:
 /regexp/i                                             不区分大小写
/regexp/s                                              使句点(.)匹配任何字符,包括换行符(\n)
/regexp/x(小写的)                                从模式中删除空白符和注释
/regexp/m                                             使^匹配换行符(\n)之后的内容,美元符号($)匹配换行符                                                           (\n)之前的内容
/regexp/e                                               如果替换字符串是PHP代码,使用eval()执行该代码来得到实附的替换字符串。
/regexp/U                                              颠倒子模式的贪婪性: * 和+尽可能少地匹配而不是尽可能多。
/regexp/u                                               把模式字符串当作 UTF-8编码对待
/regexp/x(大写的)                                   如果一个反斜杠之后跟着没有特殊意义的字符,将产生一个错误。
/regexp/S(大写的)                         小心检查模式结构,使得第二次运行时加快速度
/regexp/D                                            使$字符匹配一行的末尾
/regexp/A                                             把锚定位在字符串的开头就像模式中有^一样

eg:

preg_match('/^.*?\w+$/is');



Python  中文正则(摘自: http://iregex.org/blog/python-chinese-unicode-regular-expressions.html )

1 关于 match与search
 match只从字串的开始位置进行匹配,如果失败,它就此放弃;而search则会锲而不舍地完全遍历整个字串中所有可能的位置,直到成功地找到一个匹配,或者搜索完字串,以失败告终。如果你了解match的特性(在某些情况下比较快),大可以自由用它;如果不太清楚,search通常是你需要的那个函数。

2utf8下,每个汉字占据3个字符位置,正则式为[\x80-\xff]{3},这个都知道了吧。

unicode下,汉字的格式如\uXXXX,只要找到对应的字符集的范围,就能匹配相应的字串,方便从多语言文本中挑出所需要的某种语言的文本。不过,对于像日文这样的粘着语,既有中文字符,又有平假名片假名,或许结果会有所偏差。

匹配中文时,正则表达式和目标字串的格式必须相同。这一点至关重要。或者都用默认的utf8,此时你不用额外做什么;如果是unicode,就需要在正则式之前加上u""格式。

可以这样定义unicode字符串:string=u"我爱正则表达式"。如果字串不是unicode的,可以使用unicode()函数转换之。如果你知道源字串的编码,可以使用newstr=unicode(oldstring,original_coding_name)的方式转换,例如 linux 下常用unicode(string, "utf8"),windows 下或许会用cp936吧,没测试。
  评论这张
 
阅读(622)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017