【问题标题】:Search codes in a Text in PHP [closed]在 PHP 中的文本中搜索代码 [关闭]
【发布时间】:2012-08-12 22:08:22
【问题描述】:

我想在文本中查找“代码”,这些代码可以包含字母和数字,并且可以有不同的长度。文本可能如下所示:

This is a example text, it contains different codes like this one 8de96217e0fd4c61a8aa7e70b3eb68 or that one a7ac356448437db693b5ed6125348.

我怎样才能以正确的顺序(从第一个到最后一个)找到并回显它们。 我认为 prey_match() 有一种方法,但我不知道如何制作正则表达式。附加信息:代码大约 30 个字符长,仅包含小写字母和数字。

非常感谢任何帮助。谢谢!

【问题讨论】:

  • preg_match 对模式进行操作。如果您没有模式,那么您可能确实需要 prey_match() 。您知道代码可能是什么样的吗,即超过 25 个字符等?
  • 你能更明确地定义代码是什么吗?一种方法是使用空格将explode 字符串转换为单词,然后省略仅由字符或标点符号组成的单词。
  • 那些看起来像 md5 哈希,它们都是 32 长吗?
  • @WouterH 它们看起来像 md5 哈希,但它们的长度不完全是 32 个字符

标签: php regex search full-text-search


【解决方案1】:
preg_match_all("/[a-z0-9]{25,}/", $text, $matches);
print_r($matches);

简单但应该适合您的情况。

输出:

Array
(
    [0] => Array
        (
            [0] => 8de96217e0fd4c61a8aa7e70b3eb68
            [1] => a7ac356448437db693b5ed6125348
        )

)

【讨论】:

  • 这是最好的答案,不应该在页面底部。上升。
  • 不会匹配任何由字母或数字组成的单词吗?
  • 我认为这是正确的方法,但它不仅与数字和字母单词匹配,而且与每个单词匹配。
  • 已更正、测试并更改了我的答案.. ;-)
【解决方案2】:

您可以使用此代码:

$string = "This is a example text, it contains different codes like this one 8de96217e0fd4c61a8aa7e70b3eb68 or that one a7ac356448437db693b5ed6125348."
preg_match_all("/[0-9a-z]{30,}/", $string, $matches)

其中$matches 是一个包含所有匹配项的数组。如果您愿意,可以将 {30,} 调整为更高或更低的数字。这只是连续字符的数量。

【讨论】:

    【解决方案3】:

    基本上,

    $words = explode($text);
    foreach($words as $word)
    {
      if(strlen($word)==30)
        echo $word;
    }
    

    如果你想消除像#+$*...这样的字母,你应该使用正则表达式

    编辑:Forlan07 的答案显然更好。

    【讨论】:

    • 来自 OP:代码可以包含字母和数字,并且可以有不同的长度。
    • pseudopseudohypoparathyroidism 这个词怎么样? :p
    • 假性甲状旁腺功能低下 :)
    【解决方案4】:

    如果您的要求是“哈希”有 个字母和数字,您可以尝试类似的方法:

    $string = "This is a example text, it contains different codes like this one 8de96217e0fd4c61a8aa7e70b3eb68 or that one a7ac356448437db693b5ed6125348.";
    
    $words = explode(" ", $string);
    $hashes = array();
    
    foreach ($words as $currWord)
    {
        $hasLetter = false;
        $hasNumber = false;
    
        for ($index = 0; $index < strlen($currWord); $index++)
        {
            if (ctype_alpha($string[$index]))
                $hasLetter = true;
            else
                $hasNumber = true;
        }
    
        if ($hasLetter && $hasNumber)
            $hashes[] = $currWord;
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 2011-05-28
      • 2011-05-15
      • 2012-08-31
      • 2012-10-09
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多