jje*_*ton 3 php regex wordpress
我正在编写一个WordPress插件,其中一个功能是删除重复的空格.
我的代码看起来像这样:
return preg_replace('/\s\s+/u', ' ', $text, -1, $count);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我需要u
修饰符.我见过其他使用preg_replace但不需要为Unicode修改它的插件.我相信我有一个WordPress的默认安装.
如果没有修饰符,代码将使用Unicode替换字形而不是空格替换所有空格.
使用u修饰符,我没有得到字形,并且它不会替换所有空格.
下面的每个空间都有1-10个空格.正则表达式仅从每个组中移除空间.
之前:
This sentence has extra space. This doesn’t. Extra space, Lots of extra space.
Run Code Online (Sandbox Code Playgroud)
后:
This sentence has extra space. This doesn’t. Extra space, Lots of extra space.
Run Code Online (Sandbox Code Playgroud)
$count = 9
如何让正则表达式替换整个匹配的空间?
$new_text = preg_replace('/\s\s+/', ' ', $text, -1, $count);
Run Code Online (Sandbox Code Playgroud)
它只在我在wordpress插件中使用它时才会中断.我在过滤器中使用此功能:
function jje_test( $text ) {
$new_text = preg_replace('/\s\s+/', ' ', $text, -1, $count);
echo "Count: $count";
return $new_text;
}
add_filter('the_content', 'jje_test');
Run Code Online (Sandbox Code Playgroud)
我试过了:
remove_all_filters('the_content');\s+, \s\s+, [ ]+等这将使用单个空格替换两个或多个空格,制表符和/或换行符的所有序列:
return preg_replace('/[\p{Z}\s]{2,}/u', ' ', $text);
Run Code Online (Sandbox Code Playgroud)
/u如果$text保存文本编码为UTF-8,则需要该标志.即使正则表达式中没有Unicode字符,PCRE也必须$text正确解释.
我添加\p{Z}到字符类中是因为PCRE仅在使用短字符时才匹配ASCII字符\s,即使在使用时也是如此/u.添加\p{Z}可确保匹配所有Unicode空格.可能还有其他空格,例如字符串中的不间断空格.
我不确定echo在WordPress过滤器中使用是否是一个好主意.
| 归档时间: |
|
| 查看次数: |
2963 次 |
| 最近记录: |