我一直在努力学习regexp很多年......我需要的是从字符串中删除所有空格,但不是从<标签> (例如,一个href标签或一个img src标签必须有空格)。
我在PHP中这样做,我正在尝试不同的解决方案(我是regexp的总菜鸟,这让我很困惑)。 到目前为止,这是我的代码的一部分:
$text=$_POST["text"];
$pattern = '(\<.+?\>)|\s';
$replace = '';
echo preg_replace( $pattern, $replace, $text );
这有什么问题? :(
答案 0 :(得分:6)
首先,你忘记了正则表达式周围的分隔符。然后,正则表达式/(\<.+?\>)|\s/
匹配标记或空格,因此preg_replace()
用空字符串替换任一个。
至少可以说,使用正则表达式操纵HTML很困难。如果您可以确定文件中的任何位置都没有<
和>
,除了它们分隔标记的位置,您可以查找最近的括号(如果有)的空格是一个开放的:
$result = preg_replace(
'/\s+ # Match one or more whitespace characters
(?! # but only if it is impossible to match...
[^<>]* # any characters except angle brackets
> # followed by a closing bracket.
) # End of lookahead
/x',
'', $subject);
答案 1 :(得分:2)
非正则表达式解决方案。
function remove_non_tag_space($text){
$len = strlen($text);
$out = "";
$in_tag=false;
for($i=0;$i<$len; $i++){
$c = $text[$i];
if($c=='<')
$in_tag=true;
elseif($c=='>')
$in_tag=false;
$out .= $c==" "? ($in_tag? $c: ""): $c;
}
return $out;
}
请参阅此处的示例http://ideone.com/oI0DI