博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[正则表达式]难点和误区
阅读量:4617 次
发布时间:2019-06-09

本文共 1151 字,大约阅读时间需要 3 分钟。

1.语言的转义

正则表达式一般通过语言的字符串字面量传达给正则表达式引擎,所以在到达真正的表达式引擎时,表达式还会通过一层语言本身的字符串字面量转义。

比如PHP中,需要匹配反斜杠\则需要在字面量中输入4个反斜杠,其中两个反斜杠实际的转义意义发生在PHP本身对字符串字面量处理的层面上,最终到表达式引擎收到的表达式是[\\]。

$match = array();preg_match('/[\\\\]/', 'aaa\aaa', $match);var_dump($match);

 2.十六进制代码点的转义

以ASCII为例,通常字符组都会支持如[\x00-\xff]这样的十六进制代码点转义,意思是匹配编码为00到ff的ASCII字符。

Unicode特殊一些,由于Unicode的编码范围超过FF,这个时候就需要用到多字节代码点,不过不同语言的支持程度有点不一样,详情需要参考《精通正则表达式(第三版)》118页。

就PHP而言,preg包支持\xF,\xFF,\x{F...}的单字,双字,多字的转义方法,如果需要支持Unicode,则需要在u模式下,比如:

$match = array();preg_match_all('/[\xa\xd]/u', "\n", $match);var_dump($match);$match = array();preg_match_all('/[\x{2460}\x{2462}]/u', '①②③', $match);var_dump($match); $match = array(); preg_match_all('/[\x{1f34b}-\x{1f34c}]/u', "zß\u6c34\xf0\x9f\x8d\x8c", $match); var_dump($match);

而对于Javascript,则支持\xFF,\uFFFF的双字,四字的转义方法,而且\uFFFF表明正则运行在Unicode模式,不需要额外指明u模式,比如:

var patt=new RegExp("[\x0a\x0d]","g");var str="\n";while ((result = patt.exec(str)) != null)  {    console.log(result);}var patt=new RegExp("[\u2460-\u2463]","g");var str="①②③";while ((result = patt.exec(str)) != null)  {    console.log(result);}

 

①②③

转载于:https://www.cnblogs.com/yiyide266/p/10469518.html

你可能感兴趣的文章
get the page name from url
查看>>
visual studio中csproj文件中的project guid改为小写 ( notepad++ 正则)
查看>>
TeeChart显示三维的图形,使用Surface
查看>>
如何使用 Idea 远程调试 Java 代码
查看>>
加密,解密
查看>>
在C#代码中应用Log4Net(一)简单使用Log4Net
查看>>
[转]如何写软件项目技术标
查看>>
每日站立会议个人博客五
查看>>
ddd
查看>>
死磕 java同步系列之AQS起篇
查看>>
利用Lucene把文本的字体格式进行改动,然后输出到一个新的文件里
查看>>
[Openstack] Expecting an auth URL via either --os-auth-url or env[OS_AUTH_URL]
查看>>
How to Create Modifiers Using the API QP_MODIFIERS_PUB.PROCESS_MODIFIERS
查看>>
待飞笔记(第一天 )
查看>>
用Winrar批量解压缩有密码文件方法,只需输入一次密码
查看>>
解惑好文:移动端H5页面高清多屏适配方案
查看>>
traefik添加多证书
查看>>
PhantomJs 笔记
查看>>
js设计模式--语言类型
查看>>
C#多线程之二:ManualResetEvent和AutoResetEvent
查看>>