我正在处理一个很大的文件,其中包含要提取的字符串。问题是我不知道字符串到底是什么,但是我知道它们的特征是:
我认为做到这一点的最佳方法是使用正则表达式,但我似乎还不知道该怎么做。
我在另一个堆栈溢出线程上找到了此正则表达式(^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$
),该线程表示该字符串搜索长度在1到10个字符之间的字符串,并且至少包含1个数字和1个字母。不幸的是,当我运行它时,我根本不会得到任何结果,因此,如果我进行修改,我认为它不会起作用。
这是我什至尝试修改任何内容之前执行的测试:
$str = "ok12 aab2 Ab2";
preg_match_all('/^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,12}$/', $str, $matches);
print_r($matches);
32个字符串的一些示例:
abb660010102020304847bbaedf62622
0987ffbb12444bcdae321123478ebade
我什至发现了一个正则表达式,该正则表达式仅应查找具有正确特征的字符串,即使这样也不会返回任何结果。
$str = "abb660010102020304847bbaedf62622...0987ffbb12444bcdae321123478ebade";
define('R_MD5_MATCH', '/^[a-f0-9]{32}$/i');
preg_match_all(R_MD5_MATCH,$str, $out, PREG_PATTERN_ORDER);
print_r($out);
答案 0 :(得分:2)
这应该足够了:
/\b[0-9a-f]{32}\b/
几乎可以找到您所找到的内容,但这与行内的行和自身都应该匹配,而不是您的行,只有当行本身时才匹配。
^
和$
分别是行的开头和结尾,而\b
是字边界。这样可以避免较长字符串的部分匹配,这可能是不希望的。
单词边界基本上是任何非字母数字字符,例如标点符号,空格等。