如何在字符串中一起检测alpha和数字的组合?

时间:2014-05-15 23:01:59

标签: matlab matlab-figure

我希望在字符串中一起检测所有alpha和数字的组合。

例如,

http://www.suleymanmemnun.com/~zeedee/9a70c0acdb2584924f5d0/web.php?#//uk/cgi-bin/confirm.php?cmd=login-submit&dispatch=0ec5d97d42ff8ff75e46c02a034bdf3bb4bf53c0db18fd85h0a134

在上面的网址中,我希望将其拆分为' /',然后检测该部分是否包含数字和alpha的组合。如果是,则为1,否则为0

www.suleymanmemnun.com--->0
~zeedee---->0
9a70c0acdb2584924f5d0---->1
web.php?#----->0

2 个答案:

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