lygyh9985825 发表于 2015-8-30 08:13:11

php正则表达式的分组捕获

  经过测试,发现php正则表达式获取分组捕获是从$0开始,而平时工作中JavaScript中的正则是$1..$9
  
  在提取项目代码中的汉字时,因为当时操作速度很快(赶时间),很担心当时.properties的文件{\d}的数字顺序搞错了:
  1、可能从{1}开始,而不是从{0}开始
  2、可能跳着写了,比如第一个是{0}第二个需要替换的地方却写着{2}
  因为使用人工手动操作的,所以这种情况是难以避免,只能说减少误操作。写完了,得再检查一遍,这个遇到困难了,二三千行的代码,用眼睛一行一行查,那的比较累了,而且还不一定能检查出来。一多就容易出错,而且行与行之间靠的太近了,字又太小…
  
  突然想起来,觉得php可以节省一点时间,读取文件,然后将关键的地方标红…
  
  然后就开始了:php读取文件,然后逐行的读取,使用正则表达式匹配符合{\d}的行,然后将{\d}的地方使用红色进行重点的标记,之后人工去查看每一行是能是符合规则。代码不对,却很受用,至少省了用眼睛去一个一个检查的时间:

  这样一眼扫过去,就能很清楚的看出每一行顺序是否都写对了,写错了的行,前面有行号,找到相应行再改改.
  

   
   1: <!Doctype html>

   2: <html>

   3: <head>

   4: <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot;>

   5: <title>检测中文替换文字的正确性</title>

   6: </head>

   7: <?php

   8:   $filename = &quot;C:\test.properties&quot;;

   9:   $mode = &quot;r&quot;;

10:   $file_handle = fopen($filename, $mode);

11:   $lineNum = 0;

12:   $pattern = &quot;/{\d}[^{}]+/&quot;;

13:   if ($file_handle) {

14:         while (!feof($file_handle)) {

15:             ++$lineNum;

16:             $line = fgets($file_handle);

17:             if (preg_match($pattern, $line)) {

18:               $line = preg_replace(&quot;/{\d}/&quot;, &quot;<font color='red'>$0</font>&quot;, $line);

19:               echo &quot;行&quot;.$lineNum.&quot;:&quot;.$line.&quot;<br/><br/><br/>&quot;;

20:             }

21:         }

22:   } else {

23:         echo &quot;文件读取失败&quot;;

24:   }

25:   fclose($file_handle);

26: ?>

27: </html>
  
  参考问题:

用 PHP 读取文件的正确方法

掌握 PHP 中的正则表达式(1)

掌握 PHP 中的正则表达式(2)
  
  准备趁春节放假那几天再把《精通正则表达式》好好温习温习,深入研究一下php、perl、python中正则的异同点。
页: [1]
查看完整版本: php正则表达式的分组捕获