我希望在字符串中一起检测所有alpha和数字的组合。
例如,
在上面的网址中,我希望将其拆分为' /',然后检测该部分是否包含数字和alpha的组合。如果是,则为1,否则为0
www.suleymanmemnun.com--->0
~zeedee---->0
9a70c0acdb2584924f5d0---->1
web.php?#----->0
答案 0 :(得分:3)
MATLAB有一个内置函数isstrprop
来检测字符串中字母或数字的部分。语法是:
A = isstrprop(input_string, 'alphanum')
此处用于拆分URL字符串的每个部分。
<强>代码强>
%//url_string is the given URL string
s1 = regexp(url_string,'/','Split');
out = any(cellfun(@all,isstrprop(s1(~cellfun(@isempty,s1)),'alphanum')))
<强>解释强>
要理解代码,我们将其分解为部分 -
%// Input URL string
url_string = 'http://www.suleymanmemnun.com/~zeedee/9a70c0acdb2584924f5d0/web.php?#//uk/cgi-bin/confirm.php?cmd=login-submit&dispatch=0ec5d97d42ff8ff75e46c02a034bdf3bb4bf53c0db18fd85h0a134'
%// Split into parts based on '/'
split1 = regexp(url_string,'/','Split');
%// Remove the empty split parts
out_parts = split1(~cellfun(@isempty,split1))
我们会得到 -
out_parts =
'http:' 'www.suleymanmemnun.com' '~zeedee' '9a70c0acdb2584924f5d0' 'web.php?#' 'uk' 'cgi-bin'
'confirm.php?cmd=login-submit&dispatch=0ec5d97d42ff8ff75e46c02a034bdf3bb4bf53c0db18fd85h0a134'
接下来,我们在每个网址部分使用isstrprop
-
out_detects = cellfun(@all,isstrprop(out_parts,'alphanum'))
它给出 -
out_detects =
0 0 0 1 0 1 0 0
最后,由于您希望找到any
这样的组合,我们将使用any
命令来获得最终输出 -
out = any(out_detects)
最终答案是1
。
多个网址字符串案例
如果您的文件包含您要针对上述问题标题测试的所有网址字符串,请使用此 -
%// url_strings_filepath is the file that contains all the URLs line by line
url_string_array = importdata(url_strings_filepath);
out = false(1,numel(url_string_array));
for k = 1:numel(url_string_array)
s1 = regexp(char(url_string_array(k)),'/','Split');
out(k) = any(cellfun(@all,isstrprop(s1(~cellfun(@isempty,s1)),'alphanum')));
end
disp(out)
答案 1 :(得分:2)
假设您要检测包含一个或多个字母,一个或多个数字以及可能还包含其他字符的部分:
parts = regexp(str,'/+','split'); %// divide strings into parts
result = cellfun(@(p) ~isempty(regexp(p,'[a-z_A-Z]')) & ~isempty(regexp(p,'\d')), parts);
使用您的示例网址,它会显示:
parts =
http:
www.suleymanmemnun.com
~zeedee
9a70c0acdb2584924f5d0
web.php?#
uk
cgi-bin
confirm.php?cmd=login-submit&dispatch=0ec5d97d42ff8ff75e46c02a034bdf3bb4bf53c0db18fd85h0a134
result =
0 0 0 1 0 0 0 1
确定字符串的至少一个部分是否包含您想要的内容:使用any(result)
。在示例中为1
。
假设您要检测包含任意字母和数字组合的部分,而不是其他字符:
parts = regexp(str,'/+','split'); %// divide strings into parts
result = cellfun(@(p) numel(regexp(p,'[a-z_A-Z_0-9]'))==numel(p) , parts)
在你的例子中:
result =
0 0 0 1 0 1 0 0