替换Prolog中的子串

时间:2018-04-10 04:46:05

标签: replace prolog

为了替换字符串中的子字符串,我编写了一个名为<input name="__RequestVerificationToken" type="hidden" value="TFwq8uATFit48n63lm8AkWFw2uPCaAroIFYcjznF35tEbRc1vTyJaz3QDu4E_aIM85LcttBubeRqvxy-he0SMRQsTdtJwvvwQ_Adk1yWbVA1" />的谓词。它使用SWI-Prolog的append/3谓词:

replace_substring

但是,我不确定这是否是替换Prolog中子串的最有效方法。 Prolog是否有可用于相同目的的内置谓词?

1 个答案:

答案 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