我需要知道是否有任何方法可以将两个正则表达式合并为一个正则表达式。最近我不得不制作以下PHP代码,但我觉得有一种简化的方法来实现这一点,而不使用多个preg_replace 标签。我要做的是剥离 & ©
等..并删除所有多个空格
$textinput = 'this is a test input \' """""" """" @#$$%&*)_+!@#$%^&*) 123 456';
$var = preg_replace("/&#?[a-z0-9]{2,8};/i",'',$textinput)
$string = preg_replace('/\s+/', ' ', $var);
this is a test input ' """""""""" @#$$%&*)_+!@#$%^&*) 123 456
我知道php中的html_entity_decode
函数可以删除特殊字符,这只是一个例子!如何将两个正则表达式合并为一个?< / p>
谢谢!
答案 0 :(得分:2)
您可以使用逻辑OR运算符组合两个正则表达式
(?:&#?[a-z0-9]{2,8};)+|(?<=\s)\s+
您的代码将是,
<?php
$mystring = 'this is a test input \' """""" """" @#$$%&*)_+!@#$%^&*) 123 456';
$pattern = "~(?:&#?[a-z0-9]{2,8};)+|(?<=\s)\s+~";
$replacement = "";
echo preg_replace($pattern, $replacement, $mystring);
?>
或强>
<?php
$mystring = 'this is a test input \' """""" """" @#$$%&*)_+!@#$%^&*) 123 456';
$pattern = "~&#?[a-z0-9]{2,8};|(?<=\s)\s+~";
$replacement = "";
echo preg_replace($pattern, $replacement, $mystring);
?>
输出:
this is a test input ' """""" """" @#$$%&*)_+!@#$%^&*) 123 456
答案 1 :(得分:2)
$var = preg_replace_callback('/&#?[a-z0-9]{2,8};|\s+/i', function($match) {
return $match[0][0] === '&' ? '' : ' ';
}, $textinput);
答案 2 :(得分:2)
这将在一个有效步骤中完成两次替换(不会丢失空白字符):
$replaced = preg_replace('~(?:&#?[a-z0-9]{2,8};)+|\s\K\s+~', '', $yourstring);
在the demo上,查看所有额外字符的定位方式。
<强>解释强>
|
的左侧,(?:&#?[a-z0-9]{2,8};)+
定位目标群体,例如
,而不是一次只有一个,但如果他们正在接触,则会在一起。\s
匹配一个空格,然后\K
告诉引擎将其从匹配中删除(它不会被替换),然后\s+
匹配