在以下字符串中,如何删除括号内的空格?
"The quick brown fox (jumps over the lazy dog)"
期望的输出:
"The quick brown fox (jumpsoverthelazydog)"
我猜我需要使用正则表达式。我需要定位括号内部。以下将删除括号中的所有内容,包括括号。
preg_replace("/\(.*?\)/", "", $string)
这不起作用:
preg_replace("/\(\s\)/", "", $string)
我承认,正则表达不是我的强项。我怎样才能只定位括号内部?
<小时/> 注意:上面的字符串仅用于演示。实际字符串和括号的位置不同。以下案例是可能的:
"The quick brown fox (jumps over the lazy dog)"
"The quick (brown fox jumps) over (the lazy dog)"
"(The quick brown fox) jumps over the lazy dog"
使用Poiz的答案,我修改了个人使用的代码:
function empty_parantheses($string) {
return preg_replace_callback("<\(.*?\)>", function($match) {
return preg_replace("<\s*>", "", $match[0]);
}, $string);
}
答案 0 :(得分:1)
在这种情况下,您可以使用2 <?php
$string = "The quick (brown fox jumps) over (the lazy dog)";
//First preg search all string in ()
preg_match_all('/\(.(.*?).\)/', $string, $match);
foreach ($match[0] as $key => $value) {
$result = preg_replace('/\s+/', '', $value);
if(isset($new_string)){
$new_string = str_replace($value, $result, $new_string);
}else{
$new_string = str_replace($value, $result, $string);
}
}
echo $new_string;
?>
The quick (brownfoxjumps) over (thelazydog)
结果
header('Location: /signup');
答案 1 :(得分:1)
最简单的解决方法是在preg_replace()
内使用preg_replace_callback()
而不进行任何循环或单独replace-functions
,如下所示。优点是你可以在(括号)中包含多个字符串组,如下面的示例所示..并且顺便说一下,你可以测试它here。
<?php
$str = "The quick brown fox (jumps over the lazy dog) and (the fiery lion caught it)";
$str = preg_replace_callback("#\(.*?\)#", function($match) {
$noSpace = preg_replace("#\s*?#", "", $match[0]);
return $noSpace;
}, $str);
var_dump($str);
// PRODUCES:: The quick brown fox (jumpsoverthelazydog) and (thefierylioncaughtit)' (length=68)
答案 2 :(得分:0)
我认为只用一个正则表达式就可以做到这一点。
应该可以抓取任何括号的内容,preg_replace所有空格,然后重新插入原始字符串。如果你必须做很多事情,这可能会很慢。
最好的方法是简单的方法 - 只需逐步浏览字符串的字符,当达到a时递增一个值(当你到达a时递减)。如果值为0,则将字符添加到缓冲区;否则,先检查它是否是空格。
答案 3 :(得分:0)
尝试使用以下内容:
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
finishView = ((View) getParent()).findViewById(revealViewId);
...
}