使用功能检查IP地址

时间:2014-04-23 16:02:29

标签: matlab matlab-figure

我可以在cmd窗口中运行它,但在函数中写入时会遇到问题。

checkIP.m

function feature1 = checkIP(data)

%data = importdata('DATA/URL/testing_URL')

domain_URL = regexp(data,'\w*://[^/]*','match','once');
IPs = regexp(domain_URL,'(?<=//)(?<=//)(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})','match','once');

feature1_data = (~cellfun(@isempty,IPs))
feature1(feature1_data~=0)=1;
feature1(feature1_data==0)=-1
end

all.m

data = 'http://123.456.789.123/stackoverflow.com/questions/23245757/create-and-call-function';
feature1 = checkIP(data)

1 个答案:

答案 0 :(得分:1)

要运行cellfun,输入显然必须是cell。问题是如果datachar数组而不是cell数组的char数组,regexp将不会返回一个单元格,至少不会返回使用'once'选项调用。最简单的解决方案是确保第一个regexp调用的输入是一个单元格数组,如果只有一个单元格的话。

无论如何,在第一个regexp之前,添加:

if ischar(data),
    data = cellstr(data);
end

另请注意,第二个regexp应该转义点(.):

IPs = regexp(domain_URL,'(?<=//)(?<=//)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})','match','once');

出于好奇,为什么重复的后视((?<=//))?