我可以在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)
答案 0 :(得分:1)
要运行cellfun
,输入显然必须是cell
。问题是如果data
是char
数组而不是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');
出于好奇,为什么重复的后视((?<=//)
)?