preg_replace函数:括号中的空格替换

3

我正在尝试理解正则表达式,但是失败得很惨。

我有一个字符串,我想匹配并删除两个括号之间的所有空格。

例如:

This string (is an example).

Would become:

This string (isanexample).
2个回答

4

您可以使用 preg_replace_callback 函数。

$str = "This string (is an example).";
$str = preg_replace_callback("~\(([^\)]*)\)~", function($s) {
    return str_replace(" ", "", "($s[1])");
}, $str);
echo $str; // This string (isanexample).

太好了!我现在遇到了一个新问题,但是你的演示效果很好 :) 具体来说,如果我想在多行上运行它,每行都要查找括号,并删除每行中括号之间的空格,该怎么办? - Matthew Collins
它已经可以处理多行了。你可以添加正则表达式的 m 修饰符,但不需要。测试:"This string (is an example).\n\t\t\t(foo bar baz) ..." - Kerem

0
你需要递归地完成这个任务。一个正则表达式是不够的。
$line = preg_replace_callback(
        '/\(.*\)/',
        create_function(
            "\$matches",
            "return preg_replace('/\s+/g','',\$matches);"
        ),
        $line
    );

这段代码的作用是,首先找到括号内的所有文本。它将此匹配传递给命名方法(或在此情况下为匿名方法)。该方法的返回值用于替换已匹配的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接