请教大家一个正则的问题

hphper 发布于 2013/05/27 16:10
阅读 234
收藏 0
$fileContent = preg_replace("/\{(\\\$[a-zA-Z0-9_\[\]\\\ \-\'\,\%\*\/\.\(\)\>\'\"\$\x7f-\xff]+)\}/s", "<?php echo \\1; ?>", $fileContent);
preg_match_all("/\\$/","$$",$match);

preg_match_all("/\\\$/","$$",$match);
都能匹配$
preg_match_all("/\$/","$$",$match);
匹配是空的
单引号是1个或2个\
双引号是 2个或3个\才能匹配

那双引号一个\的匹配什么?

如下图里代码


方框里的匹配什么啊?

诚心求助


以下是问题补充:

@hphper:[\x7f-\xff]匹配什么啊? (2013/05/27 16:12)
加载中
0
南湖船老大
南湖船老大

又是一个不看手册的PHPer。

preg_match_all("~\Q$\E~","$$",$match); 
var_dump($match);
1.不要用 / 做正则的分隔符,因为 / \ 什么的混在一起可读性差,特容易看花眼,可以用 ! # ~ 等符号。

2.\Q\E 可以用于在模式中忽略正则表达式元字符,避免写出\\,\\\这种很难理解的代码。

至于方框里的,匹配的就是$ ,看起来像是在搞PHP的模板引擎,匹配PHP里的变量,只不过代码作者的正则实在是...写的又臭又长。

另外,[\x7f-\xff]匹配中文,PHP的变量支持中文,如 $中文='中文';

hphper
hphper
我在Windows下,双引号里的\$匹配不了$,怎么回事?
南湖船老大
南湖船老大
回复 @苏翰 : 基本上除了C语言,其他语言都支持中文变量,PHP,Java,Javascript...
苏生不惑
苏生不惑
$中文='中文';这也可以?第一次见,长知识了
0
hphper
hphper
[\x7f-\xff]是匹配中文的,自己顶个
0
洪文军

查下手册就可以了

0
hphper
hphper

引用来自“洪文军”的答案

查下手册就可以了

怎么查?
0
优雅先生
优雅先生
 匹配英文的dollar字符
0
Oberding
Oberding
JS中这算是一个恶心的地方,\是转义符,可是\的存在也需要再来一个\去转义它,这样:\\$,因为$是特殊符号,需要\去转义它,但是\需要再来一个\来转义,所以这个地方我也觉得不科学,按照ECMAscript的解释,那为什么转义\的那个\就不需要再来一个\转义吗,要是需要的话,那\岂不是没完了,所以我觉得这里很不科学,真心不如JAVA里科学
0
包菜兄
包菜兄
#@!%&全都可以作为正则的边界符。
返回顶部
顶部