根据某些特征搜索字符串

时间:2018-09-26 23:28:09

标签: php regex

我正在处理一个很大的文件,其中包含要提取的字符串。问题是我不知道字符串到底是什么,但是我知道它们的特征是:

  • 长度为32个字符
  • 字母数字
  • 长32个字符的字符串中的字母均为小写。
  • 字母仅来自a-f

我认为做到这一点的最佳方法是使用正则表达式,但我似乎还不知道该怎么做。

我在另一个堆栈溢出线程上找到了此正则表达式(^(?=.*\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);

1 个答案:

答案 0 :(得分:2)

这应该足够了:

/\b[0-9a-f]{32}\b/

几乎可以找到您所找到的内容,但这与行内的行和自身都应该匹配,而不是您的行,只有当行本身时才匹配。

Demo

^$分别是行的开头和结尾,而\b是字边界。这样可以避免较长字符串的部分匹配,这可能是不希望的。

单词边界基本上是任何非字母数字字符,例如标点符号,空格等。