我试图用括号替换一些字符串为负数:
e.g。 “(12345)”将成为“-12345” “(1,23)”将成为“-1,23” “(1.55)”将成为“-1.55”
这就是我的尝试:
amount = value[sum.to_sym].gsub /\((.+)\)/ , "-#$1"
但在某些情况下会返回“ - ”,例如“(59006)”
有更好的方法吗
答案 0 :(得分:4)
问题是你的替代模式,而不是你的正则表达式。字符串插值Route::group(array('prefix' => 'admin'), function() {
$router->bind('user', function ($value) {
return app(UserInterface::class)->findOrFail($value);
});
});
("-#$1"
的缩写)在调用"-#{$1}"
之前进行评估,因此您的替换模式是调用gsub
时的$ 1。
您可以通过执行
来解决此问题gsub
其中\ 1表示第一个捕获组或使用块形式
gsub /\((.+)\)/ , "-\\1"
如果性能至关重要,那么第二个可能会慢一点,因为gsub必须调用该块,但它不太可能有所作为
答案 1 :(得分:1)
你的正则表达式很好。使用括号或\1
"(59,006.23)".gsub(/\((.+)\)/){"-#$1"} #=> "-59,006.23"
"(59,006.23)".gsub(/\((.+)\)/,'-\1') #=> "-59,006.23"
您当前代码的问题是它将"-#$1"
作为gsub
的参数。此时,$ 1尚未更新,因此保留了您上次匹配的值。 (尝试在gsub
之前进行一些正则表达式匹配,然后你会看到我在说什么)