如何更换两美元符号之间的空格?
使用这个正则表达式一切正常,我可以删除R和R之间的空格。
\ S([^ \ R] *(\ r |?!$)) the result
但是当我使用美元符号代替R时,它不起作用。也许美元符号有一些特殊的方式。
\ s([^ \ $] *(\ $ |!$)) result with dollar sign
编辑:编程语言:PHP
答案 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>