Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 preg_replace';e';修饰语困境_Php_Regex - Fatal编程技术网

PHP preg_replace';e';修饰语困境

PHP preg_replace';e';修饰语困境,php,regex,Php,Regex,我已经为此奋斗了几天了,看来我真的得问问别人了 就本线程而言,问题在于:我试图使用PHP的preg_replace和“e”修饰符操纵字符串,以执行其中的函数。我想将[pdf]somefilename[/pdf]的任何实例更改为size('somefilename.pdf') 因此,例如,[pdf]somefilename[/pdf]可能会输出一个指向该文件的链接,后跟(137MB) 然而,出于某种原因,(137MB)部分被放在整个字符串的开头,而不是它应该放在的地方。似乎preg_replace

我已经为此奋斗了几天了,看来我真的得问问别人了

就本线程而言,问题在于:我试图使用PHP的preg_replace和“e”修饰符操纵字符串,以执行其中的函数。我想将
[pdf]somefilename[/pdf]
的任何实例更改为
size('somefilename.pdf')

因此,例如,
[pdf]somefilename[/pdf]
可能会输出一个指向该文件的链接,后跟(137MB)

然而,出于某种原因,(137MB)部分被放在整个字符串的开头,而不是它应该放在的地方。似乎
preg_replace
正在计算所有内容,然后返回并执行函数,并将结果扔到字符串的开头

所以如果我有
一些文本之类的话,之类的。下载文档:[pdf]somefilename[/pdf]
正则表达式输出
(137MB)一些文本等等。下载文档:[链接到文档]
什么时候应该输出
一些文本等等。下载文档[链接到文档](137MB)

我迷路了。谷歌救不了我。有人请帮忙

提前感谢,, 杰夫

代码如下:

$bbcode_pdf_tag = '/\[pdf\](.*?)\[\/pdf\]/ie';
$html_pdf_tag = '"<a href=\"$1.pdf\">PDF</a>" .size("\\1.pdf")';
$decoded_data = preg_replace($bbcode_pdf_tag, $html_pdf_tag, $data);
$bbcode\u pdf\u tag='/\[pdf\](.*?\[\/pdf\]/ie';
$html\u pdf\u tag=''.size(\\1.pdf');
$decoded_data=preg_replace($bbcode_pdf_tag,$html_pdf_tag,$data);

编辑:值得一提的是,size()是在一个完全不同的文件中定义的,当我使用strtolower()之类的内置函数时,似乎不会发生这种情况。在内部定义size()函数并使用preg\u replace\u回调并不能解决问题。

请改用preg\u replace\u回调“e”选项可能是危险的。preg_replace_回调示例:

preg_replace_callback('`\[pdf\]([^\[]+)\[/pdf\]`i', function ($matches) { return "<a href=\"{$matches[1]}\">PDF</a> " . filesize($matches[1]); }, $string);

psst,发布代码(或者至少是正则表达式)会让人们更容易帮助你。我们无法在不知道你在做什么的情况下帮助你。请实际提供代码。请发布您的
preg\u replace
电话,以便我们查看。感谢您的回复!我意识到“e”修饰符的危险性,并使用回调编写了一个版本,但有完全相同的问题。如果我将结果转储(
$string=“blablabla[pdf]test.php[/pdf]blablabla”;
):
string(44)“blablabla pdf 882 blabla”
)。问题可能出在别的地方。我只是想了些什么。size()函数是否打印值而不是返回值<代码>回显“你好”。打印(“世界”);//worldhello1
哦,我的天哪!我甚至从未想过检查size()是否打印了一个值而不是返回一个值,但这就是问题所在。我已经将其设置为现在返回一个值,并且没有问题。非常感谢你!
function test() {
    echo "world";
}

echo "hello " . test(); // worldhello