我目前正在使用以下正则表达式从字符串中删除小词(<4个字符).
$dirty = "I welcome you to San Diego";
$clean = preg_replace("/\b[^\s]{1,3}\b/", "", $dirty);
Run Code Online (Sandbox Code Playgroud)
所以,这将导致"欢迎迭戈";
但是,我现在需要忽略被替换的某些单词,例如:
$ignore = array("San", "you");
Run Code Online (Sandbox Code Playgroud)
会导致"欢迎你圣地亚哥"
您可以使用(?!..) 否定断言嵌入忽略列表:
preg_replace("/\b(?!San|you|not)\w{1,3}\b/", "", ...
Run Code Online (Sandbox Code Playgroud)
我也会使用\w而不是[^\s]它真的只匹配单词.
我建议使用回调(preg_replace_callback),因为如果你必须扩展到大量单词,它允许更易于维护的解决方案:
echo preg_replace_callback(
'/\b[^\s]{1,3}\b/',
create_function(
'$matches',
'$ignore = array("San", "you");
if (in_array($matches[0], $ignore)) {
return $matches[0];
} else {
return \'\';
}'
),
"I welcome you to San Diego"
);
// output: welcome you San Diego
Run Code Online (Sandbox Code Playgroud)
如果您使用的是PHP 5.3或更高版本,则可以使用匿名函数而不是调用create_function.
| 归档时间: |
|
| 查看次数: |
2309 次 |
| 最近记录: |