好的,我知道有数以万计的类似问题,但我发现很难实现这一点。 我有一些这种格式的字符串:
$x = '<iframe src="[File:19]"></iframe>';
$y = '<img src=[File:2212] />';
$z = '<source src="[File:42]" />';
我正在尝试在File:
之后获取ID,并用另一个字符串替换整个[File:xxx]
。我正在尝试以下内容,但似乎我无法完全理解preg_replace的用法。
$file = ('<iframe src="[File:134]"></frame>');
$rex = "/^.*(\[File:[0-9]{1,}\])/i" ;
if ( preg_match($rex, $file, $match) ) {
echo 'OK';
}
$file = preg_replace ($rex, "http://lala.com/la.pdf", $file);
echo "<br>".htmlentities($file)."<br>";
你能否告诉我一些关于如何做到这一点的提示?
提前致谢。
答案 0 :(得分:1)
更改这两行
$rex = "/^.*(\[File:[0-9]{1,}\])/i" ;
$file = preg_replace ($rex, "http://lala.com/la.pdf", $file);
为:
$rex = "/^(.*)\[File:[0-9]{1,}\]/i" ;
$file = preg_replace ($rex, "$1http://lala.com/la.pdf", $file);
这会将[File...]
之前的内容捕获到第1组,然后在替换部分中,将此组(即$1
)添加到替换字符串前面。
可以改写为:
$rex = "/\[File:\d+\]/i" ;
$file = preg_replace ($rex, "http://lala.com/la.pdf", $file);
答案 1 :(得分:1)
这应该可以解决问题:
preg_match('/\[File:(\d+)\]/i', $str, $match)
$ match [0]将包含整个字符串,$ match [1]将只包含该数字
正则表达式匹配后,您可以使用str_replace
从字符串中删除$ match [0]。
示例:
$x = '<iframe src="[File:19]"></iframe>';
preg_match('/\[File:(\d+)\]/i', $x, $match);
var_dump($match);
给出:
array(2) {
[0]=>
string(9) "[File:19]"
[1]=>
string(2) "19"
}
答案 2 :(得分:1)
这应该有效:
<?php
$formats[] = '<iframe src="[File:19]"></iframe>';
$formats[] = '<img src=[File:2212] />';
$formats[] = '<source src="[File:42]" />';
foreach( $formats as $format ) {
$regex = '~\[File:(\d+)\]~';
$replace = function( $matches ) {
return 'http://lala.com/la.pdf?id=' . $matches[1];
};
var_dump( preg_replace_callback( $regex, $replace, $format ) );
}
我为替换创建了一个lambda,因为我觉得你想在File:
之后使用id而不是丢弃它。玩得开心。如果您有任何疑问,请告诉我们。