1
我想更正自動創建的Linux腳本。我使用findAll(String, String)
函數來更改"$APP_ARGS"
以進行其他操作。如何在Groovy中找到帶有美元符號的雙引號字符串的子字符串
我已經試過變種:
replaceAll('"$APP_ARGS"', 'simulators ' + '"\\\\$APP_ARGS"') - doesn't find
replaceAll('\"\$APP_ARGS\"',... - doesn't find
replaceAll('"\$APP_ARGS"',... - doesn't find
replaceAll('\\"\\$APP_ARGS\\"',... - editor warning - excessive escape
replaceAll('"\\\\$APP_ARGS"',... - doesn't find
replaceAll('\\\\"\\\\$APP_ARGS\\\\"',... - doesn't find
replaceAll($/"$$APP_ARGS"/$, ...) - does not find
replaceAll('"[$]APP_ARGS"', 'something simple') - finds.
replaceAll('"[$]APP_ARGS"', '"\\\\$APP_ARGS"') - fails.
正如你看到的,如果我用正則表達式格式,這一發現工程確定。但是有沒有辦法做出逃避的工作?因爲我在替換字符串中也需要$
。
根據Groovy手冊,/../字符串不需要轉義任何東西,除了斜槓自己。但是
replaceAll(/"$APP_ARGS"/,...
也會失敗,並顯示以下消息:無法獲取未知屬性'APP_ARGS'。
似乎該功能的行爲沒有邏輯,我們必須通過實驗找到正確的解決方案。
您正在爭奪GStrings和RegExp一次。如果只使用'replace',則可以使用單引號字符串,而不必在正則表達式中處理引號。例如''ls $ ARGS'.replace('$ ARGS',「-l」)' – cfrick
我相信你如果不是第二個參數的問題,那就是純String。第一個參數BTW也是String類型,而不是Pattern。這就是我所說的:第一個參數被聲明爲String,但是作爲Pattern--部分。沒有邏輯。 – Gangnus
這與第二個參數無關,除非你正在嘗試某些東西,這在你的問題中並不清楚。請嘗試''ls'$ ARGS''。replace(''$ ARGS'','-l'$ ARGS'')'如果這不符合您的期望,請詳細說明。 'replaceAll'需要一個正則表達式作爲第一個參數(並且將把你的字符串變成一個)。 – cfrick