【发布时间】:2015-06-23 11:13:15
【问题描述】:
我正在尝试在 php 中运行以下基于正则表达式的函数,最终返回输出。
function vg_excerpt_more( $output ) {
$string = $output;
$pattern_auto_excerpt = '#([...]</p>)$#';
$pattern_manual_excerpt = '#(</p>)$#';
$replacement = ' <a href="'.get_permalink().'">[Continue...]</a></p>';
if ( preg_match( $pattern_auto_excerpt, $string ) ) {
$pattern = $pattern_auto_excerpt;
} else if ( preg_match( $pattern_manual_excerpt, $string ) ) {
$pattern = $pattern_manual_excerpt;
}
$output = preg_replace( $pattern, $replacement, $string );
return $output;
}
add_filter( 'the_excerpt', 'vg_excerpt_more' );
add_filter( 'excerpt_more', 'vg_excerpt_more' );
嗯,字符串可以以[...]</p> 或</p> 结尾,所以我必须检查这两种情况。
问题是,它抛出警告为 -
警告:PREG_MATCH():编译失败:POSIX 排序元素 在 - 'preg_match( $pattern_auto_excerpt, $string)'
和
警告:PREG_REPLACE(): EMPTY REGULAR EXPRESSION in - '$output = preg_replace($pattern, $replacement, $string);'
编辑:
在@user1852180 的有用回复之后,我继续前进并做到了 -
function vg_excerpt_more( $output ) {
$string = $output;
$pattern = '';
// $pattern_auto_excerpt = '#(\[...\]</p>)$#';
$pattern_auto_excerpt = '#(\[(?:\.|…)+\])#';
$pattern_manual_excerpt = '#(</p>)$#';
$replacement = ' <a href="'.get_permalink().'">[Continue...]</a></p>';
if ( preg_match( $pattern_auto_excerpt, $string ) ) {
$pattern = '#(\[(?:\.|…)+\]</p>)$#';
if ( preg_match( $pattern, $string ) ) {
return preg_replace( $pattern, $replacement, $string ) . "Dummy2";
}
} else if ( preg_match( $pattern_manual_excerpt, $string ) ) {
$pattern = $pattern_manual_excerpt;
return preg_replace( $pattern, $replacement, $string ) . "Dummy";
}
return $output;
}
add_filter( 'the_excerpt', 'vg_excerpt_more' );
add_filter( 'excerpt_more', 'vg_excerpt_more' );
但我仍然在前端看到 [...] 以及替换。
附言。它也从不打印“Dummy2”,总是“Dummy”。
【问题讨论】: