为了替换字符串中的子字符串,我编写了一个名为<input name="__RequestVerificationToken" type="hidden" value="TFwq8uATFit48n63lm8AkWFw2uPCaAroIFYcjznF35tEbRc1vTyJaz3QDu4E_aIM85LcttBubeRqvxy-he0SMRQsTdtJwvvwQ_Adk1yWbVA1" />
的谓词。它使用SWI-Prolog的append/3谓词:
replace_substring
但是,我不确定这是否是替换Prolog中子串的最有效方法。 Prolog是否有可用于相同目的的内置谓词?
答案 0 :(得分:1)
简短的回答是,不,Prolog没有内置的字符串替换谓词。如果子字符串位于原始字符串的末尾,则显示的内容将仅替换子字符串。也就是说,它将替换字符串"abc"
中的"xyzabc"
,但不会替换字符串"xyabcz"
中的append/2
。
您可以使用replace_substring(String, To_Replace, Replace_With, Result) :-
append([Front, To_Replace, Back], String),
append([Front, Replace_With, Back], Result).
:
replace_substring(String, To_Replace, Replace_With, Result) :-
( append([Front, To_Replace, Back], String)
-> append([Front, Replace_With, Back], Result)
; Result = String
).
如果你希望它成功而不替换不匹配,那么:
replace_substring(String, To_Replace, Replace_With, Result) :-
( append([Front, To_Replace, Back], String)
-> append([Front, Replace_With, Back], R),
replace_substring(Back, To_Replace, Replace_with, Result)
; Result = String
).
正如@false提示他的问题,你想处理替换多次出现吗?如果是这样,您方法的扩展名为:
a > b