查看: 887|回复: 7
|
PHP 函数 preg_replace 问题
[复制链接]
|
|
- $text = '[quote=1,1140366376]asdf[/quote]';
- $pattern = array(
- "/\s*\[quote=(.+?)[x|\,](\d{1,10})\][\n\r]*(.+?)[\n\r]*\[\/quote\]\s*/"
- );
- $replacement = array(
- "\\2"
- );
- $text = preg_replace($pattern,$replacement,$text);
- echo $text;
复制代码
输出结果为:
可我将以上第 6 行的字体:"\\2" 改为:
gmdate("Y-m-d","\\2")
后,输出结果变成:
为什么输出结果不是:
呢?
有谁可以告诉我吗?谢谢!
[ 本帖最后由 hui_yang 于 22-2-2006 12:09 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 22-2-2006 12:37 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 22-2-2006 01:21 PM
|
显示全部楼层
原帖由 hui_yang 于 22-2-2006 12:08 AM 发表
[code]
$text = '[quote=1,1140366376]asdf ';
$pattern = array(
"/\s*\[quote=(.+?)[x|\,](\d{1,10})\][\n\r]*(.+?)[\n\r]*\[\/quote\]\s*/"
);
$replacement = array(
"\\2" ... [/quote]
gmdate把"\\2"当作是string了,backreference在gmdate里面是无效的。 |
|
|
|
|
|
|
|

楼主 |
发表于 22-2-2006 04:29 PM
|
显示全部楼层
那要用什么方法达到我的需求呢?谢谢!
为什么其他function如custom function就可以辨认backreference,而gmdate就不能呢?
例如:
我将以上(第 1 楼)第 6 行的字体:"\\2" 改为:bar("\\3")
- function bar($string) {
- $output = '<table border=1><tr><td>';
- $output .= $string;
- $output .= '</td></tr></table>';
- return $output;
- }
复制代码
输出就没有问题:
那要用什么方法达到我的需求呢?谢谢!
原帖由 旋转便便 于 22-2-2006 12:37 PM 发表
第六行用 date("Y-m-d") 不可以咩?
date("Y-m-d","\\2") 和 gmdate("Y-m-d","\\2") 的输出结果都是一样
[ 本帖最后由 hui_yang 于 22-2-2006 04:40 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 22-2-2006 04:40 PM
|
显示全部楼层
原帖由 hui_yang 于 22-2-2006 04:29 PM 发表
为什么其他function如custom function就可以辨认backreference,而gmdate就不能呢?
例如:
我将以上(第 1 楼)第 6 行的字体:"\\2" 改为:bar("\\3")[/c ...
注意看一下你的custom function的return value,我将它简化
bar($string){
return "this is returned value: ".$string;
}
等于
$replacement = array("this is returned value: \\2");
这样当然没问题。
gmdate的parameter需要timestamp,timestamp经过gmdate function之后才pass进preg_replace。
所以,如果要转换成time string,我建议可以这样
$text = gmdate("Y-m-d",preg_replace($pattern,$replacement,$text)); |
|
|
|
|
|
|
|

楼主 |
发表于 22-2-2006 04:54 PM
|
显示全部楼层
谢谢 kfchai1982 再次出手相助
$text = gmdate("Y-m-d",preg_replace($pattern,$replacement,$text));
以上方法没有问题如果红色字体的return value只是timestamp,不过以上的只显示日期的code是我简化后的,我原本的code是:
- $replacement = array(
- "\\1 于 ".gmdate("\\2")." 发表:".bar("\\3")
- );
复制代码
所以请问还有其他方法吗?
[ 本帖最后由 hui_yang 于 22-2-2006 04:56 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 22-2-2006 05:23 PM
|
显示全部楼层
先把preg_replace的return value拿出来再做formating
$replacement = array(
"\\1"."||"."\\2"."||"."\\3"
);
$result = explode("||",preg_replace($pattern,$replacement,$text));
$text = $result[0]." 于 ".gmdate($result[1])." 发表:".bar($result[2]); |
|
|
|
|
|
|
|

楼主 |
发表于 22-2-2006 05:27 PM
|
显示全部楼层
感谢kfchai1982大大
虽然方法很麻烦下,可是仍然是没有方法中的方法,看来也只有这样了
非常感谢kfchai1982大大不厌其烦地多次出手相助!!!谢谢!! |
|
|
|
|
|
|
| |
本周最热论坛帖子
|