搜索字符串中的字符

时间:2012-03-09 14:45:25

标签: php string function

$str1 = "HEADINGLEY";
$str2 = "HDNGLY";

如何查找字符串1以查看它是否包含字符串2中按字符串2存在的顺序中的所有字符并返回true或false值?

任何帮助表示赞赏:D

如果这有帮助,这就是我提供的代码..

echo preg_match('/.*H.*D.*N.*G.*L.*Y.*/', $str1, $matches);

返回0

8 个答案:

答案 0 :(得分:1)

我想我会使用preg_match

http://us.php.net/manual/en/function.preg-match.php

...并使用$str2str_split转换为正则表达式以获取数组,并implode将其转换为字符串".*"作为字符之间的粘合剂

http://us.php.net/manual/en/function.str-split.php http://us.php.net/manual/en/function.implode.php

Upate - 我应该建议str_split而不是explode,这里的代码将从$str2

获取正则表达式
$str2pat = "/.*" . implode(".*", str_split($str2)) . ".*/";

答案 1 :(得分:0)

您可以使用一些正则表达式匹配,例如.*H.*D.*N.*G.*L.*Y.*preg_match

应该很容易在第二个字符串中添加.*

答案 2 :(得分:0)

想象一下,你的字符串是数组,之后使用array_diff函数。

http://hu2.php.net/array_diff

$str1 = "HEADINGLEY";
$str2 = "HDNGLY";

$arr1 = str_split($str1, 1);
$arr2 = str_split($str2, 1);

$arr2_uniques = array_diff($arr2, $arr1);

return array() === $arr2_uniques;

答案 3 :(得分:0)

这段代码在C#中,因为我不懂PHP,但应该很容易理解。

        int index1 = 0, index2 = 0;
        while (index1 < str1.Length && index2 < str2.Length)
        {
            if (str1[index1] == str2[index2]) index2++;
            index1++;
        }
        if (index2 == str2.Length) return true;

答案 4 :(得分:0)

这个代码片段可能会这样做:

var contains = true;

for (var i=0; i < str2.length; i++) 
{
    var char = str2.charAt(i);
    var indexOfChar = str1.indexOf(char);

    if (indexOfChar < 0)
    {
        contains = false;
    }

        str1 = str1.substr(indexOfChar);
} 

答案 5 :(得分:0)

您可以使用pre_match功能,如:

$split_str2 = str_split($str2);
// Create pattern from str2
$pattern = "/" . implode(".*", $split_str2) . "/";
// Find
$result = preg_match($pattern, $str1);

答案 6 :(得分:0)

您可以使用一些正则表达式,但要厌倦包含正则表达式特定字符的字符串。此解决方案以编程方式执行。

function contains_all_characters($str1, $str2) 
{
   $i1 = strlen($str1) - 1;
   $i2 = strlen($str2) - 1;

   while ($i2 >= 0)
   {
      if ($i1 == -1) return false;
      if ($str1[$i1--] == $str2[$i2]) $i2--;
   }

   return true;
}

答案 7 :(得分:0)

您可以尝试:

$str = 'HEADINGLEY';
if (preg_match('/[^H]*H[^D]*D[^N]*N[^G]*G[^L]*L[^Y]*Y/', $str, $m))
   var_dump($m[0]);

更新:更好的是构建这样的正则表达式,然后使用它:

$str = 'HEADINGLEY';
$pattern = 'HDNGLY';

$regex = '#' . preg_replace('#(.)#', '[^$1]*$1', $pattern) . '#';
if (preg_match($regex, $str, $m))
   var_dump($m[0]);

<强>输出:

string(10) "HEADINGLEY"