在String中搜索List中的元素

时间:2017-01-14 07:09:20

标签: string list erlang

我有一个类似List = ["google","facebook","instagram"]的列表和一个字符串P1 = "https://www.google.co.in/webhp?pws=0&gl=us&gws_rd=cr"

现在我需要找到ListP1的哪个元素。

为此,我实现了下面的递归函数,但它返回ok作为最终值,有没有找到{在这种情况下} google时,然后返回H的方法并终止堆栈中的其他递归调用。

我希望此函数返回google

traverse_list([],P1)-> ok;
traverse_list([H|T],P1) ->
 Pos=string:str(P1,H),
 if Pos > 1 ->
   io:fwrite("Bool inside no match is ~p~n",[Pos]),
   io:fwrite("inside bool nomathc, ~p~n",[H]),
   H;
 true->
   io:fwrite("value found :: ~p~n",[Pos])
 end,
traverse_list(T,P1).

1 个答案:

答案 0 :(得分:2)

它返回ok,因为递归循环的停止条件是这样的:

traverse_list([],P1)-> ok;

为此,您应该使用lists:filter/2或列表理解:

List = ["google","facebook","instagram"],
P1 = "https://www.google.co.in/webhp?pws=0&gl=us&gws_rd=cr",
lists:filter(fun(X) -> string:str(P1,X) > 1 end,List), 
% or
[X || X <- List, string:str(P1,X) > 1],