Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式返回值为空的数组_Php_Regex - Fatal编程技术网

PHP正则表达式返回值为空的数组

PHP正则表达式返回值为空的数组,php,regex,Php,Regex,所以我在读一堆PHP文件,试图找到函数调用的每个accurance 我正在寻找的函数是“.lng”(“某物”)或“.lng”(“某物”)。 我正在使用以下函数进行搜索 function fetchAllBetween($needle1,$needle2,$haystack,$include=false){ $matches = array(); $exp = "|{$needle1}(.*){$needle2}|U"; //exit($exp)

所以我在读一堆PHP文件,试图找到函数调用的每个accurance

我正在寻找的函数是“.lng”(“某物”)或“.lng”(“某物”)。

我正在使用以下函数进行搜索

function fetchAllBetween($needle1,$needle2,$haystack,$include=false){

        $matches = array();

        $exp = "|{$needle1}(.*){$needle2}|U";
        //exit($exp);
        preg_match_all($exp,$haystack,$matches);

        $i = ($include == true) ? 0 : 1 ;

        return $matches[$i];

    }
所以我就这样运行它

$tmp2 = fetchAllBetween("lng('","')", $theData);
    print_r($tmp2);
但是,如果我尝试运行以下命令,则返回空数组

$tmp2 = fetchAllBetween("lng",".", $theData);
它返回一个数组,其中的值为空。。。谁能帮我一把?基本上,我试图检索在一堆文件中传递给lng()函数的参数

这个正则表达式就可以了

preg_match_all('#\.lng\(([\'"])(.*?)(?:\1)\)#', $str, $matches);        

您得到的表达式是
lng(“*”)
,您需要更改一些内容。尝试使用以下方法:

$tmp2 = fetchAllBetween("\.lng\(['\"]","[\"']\)\.", $theData);
    print_r($tmp2);
注意事项:

  • 我添加了
    (并对其进行了转义)
  • 我从括号里逃出来了
  • 我将单引号和双引号放在一个字符类中,这样它将匹配其中一个(并对PHP字符串的双引号进行了转义)

与以前一样,返回空数组,还有其他想法吗?最好在函数中使用
preg_quote()
,而不是手动转义参数。您确实不应该使用
作为正则表达式分隔符。它在正则表达式(分隔替代项)中有特殊的含义,如果将其用作分隔符,则不能再将其用于此目的!谢谢,我得把它取下来。然后它按我需要的方式工作(有时它被传递到函数/对象中),谢谢你的帮助!