正则表达式替换美元符号之间的空格

时间:2016-02-05 16:20:55

标签: regex replace spaces

如何更换两美元符号之间的空格?

使用这个正则表达式一切正常,我可以删除R和R之间的空格。

  

\ S([^ \ R] *(\ r |?!$))   the result

但是当我使用美元符号代替R时,它不起作用。也许美元符号有一些特殊的方式。

  

\ s([^ \ $] *(\ $ |!$))   result with dollar sign

编辑:编程语言:PHP

1 个答案:

答案 0 :(得分:1)

其中一条评论中提出的\s+(?!(?:(?:[^$]*\$){2})*[^$]*$)模式涉及大量回溯,但效率极低,甚至可能导致程序冻结。

以下是我在PHP中的做法(用连字符替换$个符号之间的空格):

$re = '~\$[^$]+\$~'; 
$str = "\$ words words \$ \$ words words \$ \$ words words \$ \$ words words \$"; 
$result = preg_replace_callback($re, function($m) {
    return str_replace(" ", "-", $m[0]);
}, $str);
echo $result;

请参阅IDEONE demo

使用\$[^$]+\$模式,我们匹配两个美元符号之间的整个子字符串,在preg_replace_callback内,我们可以通过将str_replace应用于所有匹配来进一步操纵替换。< / p>