首页 > 解决方案 > 如何使用正则表达式查找特定模式?

问题描述

我在调用用户定义函数的目录中有一些 .php 文件:

_l($string);

每次将不同的字符串传递给该函数并且所有字符串都是静态的(即用户输入没有输入单个字符串)。

现在我想要一个脚本,它可以列出该目录中所有文件的所有字符串,这些文件被传递到 _l($string); 我试过:

 $fp = fopen($file, "r");
    while(!feof($fp)) {
      $content .= fgets($fp, filesize($file));
      if(preg_match_all('/(_l\(\'.*?\'\);)/', fgets($fp, filesize($file)), $matches)){
         foreach ($matches as $key => $value) {
           array_push($text, $value[0]);
         }
      }
   }

我得到字符串,但不是文件中的每个字符串,有些字符串与给定的正则表达式不匹配,那么获取所有字符串所需的条件是什么?

标签: phpregexstringfilesearch

解决方案


这更容易将双引号"或单'引号中的字符串作为_l()函数参数。

$string = file_get_contents($file);
preg_match_all('/_l\([\'"](.*?)[\'"]\);/', $string, $matches);
$text = $matches[1];

如果需要,您可以在 之前和之后添加一些可选(空格)

'/_l\s*\(\s*[\'"](.*?)[\'"]\s*\);/'

此外,如果该函数可以在循环中使用,if或者它没有被分号终止,;那么将其从模式中删除。


推荐阅读