1
Vimscript中我可以正則表達式匹配的東西`與matchstr()
和matchlist()
Vim的等效preg_quote()`和`quotemeta`
但是如果我要附加到模式的用戶提供的字符串什麼?
我如何報價在元字符?
Vimscript中我可以正則表達式匹配的東西`與matchstr()
和matchlist()
Vim的等效preg_quote()`和`quotemeta`
但是如果我要附加到模式的用戶提供的字符串什麼?
我如何報價在元字符?
我不認爲有任何東西,這樣做,但你可以使用,這可能是不夠好一個魔術性修改。比方說,你有以下表現:
let pattern = '\<'.word.'\>'
如果word
爲用戶提供的字符串,然後(如果我理解正確的話)你想忽略所有特殊改性劑在裏面。要做到這一點,請使用「非常規模式」。通過在模式前面加上一個「\ V」,你可以使模式表現得像一個文字串。之後,將「\ m」恢復正常行爲。在這種情況下:
let pattern = '\<\V'.word.'\m\>'
但是請注意,這不正是你問什麼。如果用戶輸入foo(*bar)
,它會工作得很好,但如果它的foo(\*bar)
,不會,因爲\*
對被解釋爲一個明星改性劑。如果您不瞭解這些模式,請嘗試:help /\V
以更好地瞭解魔法的工作原理。
MH,是的,提醒'\ Q'和PCRE'\ E'的我。 這當然不是完美的,因爲它是...(在我的理解不執行任何對用戶插入'\ M'到搜索字符串),但隨後也許,這可以進一步得到緩解'讓S:模式=替代(s:模式,'\\ m','\\\\ m')',批准。 – ZJR
實際上:'令s:=圖案替代(S:圖案,\\', '\\\\', 'G')' – ZJR