【问题标题】:How to find particular pattern using regex?如何使用正则表达式查找特定模式?
【发布时间】:2021-05-09 11:37:54
【问题描述】:

我在调用用户定义函数的目录中有一些 .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]);
         }
      }
   }

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

【问题讨论】:

  • 这可能是因为您有 2 个对 fgets() 的调用,请尝试在 preg_match_all 调用中删除一个并改用 $content
  • 试过了,但是这次所有的字符串都消失了,这些字符串是通过不删除 fgets() 获取的,只获取了第一个字符串。
  • 你能举一个字符串丢失的例子吗?
  • _l($string) as pattern in preg_match_all() 不是作为函数调用而是作为正则表达式字符串调用?
  • @jacouh 是的,它将被视为一种模式

标签: php regex string file search


【解决方案1】:

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

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

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

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

另外,如果函数可以在循环或if 或不以分号; 终止的地方使用,则将其从模式中删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多