Php 搜索字符串中的字符

Php 搜索字符串中的字符,php,string,function,Php,String,Function,我如何搜索字符串1以查看它是否按字符串2中存在的顺序包含字符串2中的所有字符,并返回true或false值 感谢您的帮助:D 如果这有帮助的话,这就是我今天要讲的代码 $str1 = "HEADINGLEY"; $str2 = "HDNGLY"; 返回0您可以使用一些正则表达式匹配,如*H.*D.*N.*G.*L.*Y.和preg_match 在第二个字符串中添加*应该很容易。可以使用一些正则表达式匹配,如*H.*D.*N.*G.*L.*Y.和预匹配 在第二个字符串中添加*应该很容易。假设您的

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

感谢您的帮助:D

如果这有帮助的话,这就是我今天要讲的代码

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

返回0

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


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

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


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

假设您的字符串是数组,然后使用
数组_diff
函数


假设您的字符串是数组,然后使用
array\u diff
函数


我想我应该使用
preg\u match

…并使用
str_split
$str2
转换为正则表达式,以获取数组和
内爆
将其转换回字符串,并使用
“*”
作为字符之间的粘合剂

http://us.php.net/manual/en/function.implode.php

Upate——我应该建议使用str_split而不是explode,下面的代码将从
$str2

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

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

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

return array() === $arr2_uniques;

我想我应该使用
preg\u match

…并使用
str_split
$str2
转换为正则表达式,以获取数组和
内爆
将其转换回字符串,并使用
“*”
作为字符之间的粘合剂

http://us.php.net/manual/en/function.implode.php

Upate——我应该建议使用str_split而不是explode,下面的代码将从
$str2

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

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

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

return array() === $arr2_uniques;
这段代码是C语言的,因为我不懂PHP,但应该很容易理解

$str2pat = "/.*" . implode(".*", str_split($str2)) . ".*/";
int index1=0,index2=0;
while(index1
这段代码是C语言的,因为我不懂PHP,但应该很容易理解

$str2pat = "/.*" . implode(".*", str_split($str2)) . ".*/";
int index1=0,index2=0;
while(index1
这段代码可能会做到:

        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;
var contains=true;
对于(变量i=0;i
这段代码可能会做到:

        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;
var contains=true;
对于(变量i=0;i
您可以使用预匹配功能,如下所示:

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);
} 

您可以使用pre_match函数,如下所示:

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);
} 

您可能会使用一些正则表达式,但对包含正则表达式特定字符的字符串感到厌倦。此解决方案通过编程实现

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

您可能会使用一些正则表达式,但对包含正则表达式特定字符的字符串感到厌倦。此解决方案通过编程实现

$split_str2 = str_split($str2);
// Create pattern from str2
$pattern = "/" . implode(".*", $split_str2) . "/";
// Find
$result = preg_match($pattern, $str1);
您可以尝试:

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;
}
更新:更好的方法是像这样构建正则表达式,然后使用它:

$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]);
您可以尝试:

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;
}
更新:更好的方法是像这样构建正则表达式,然后使用它:

$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]);

问题中的顺序问题-它不像使用
array\u diff
那样简单,只需添加空数组的结果比较,3分钟,我将在问题中提供代码示例部分顺序问题-它不像使用
array\u diff
那样简单,只需添加空数组的结果比较,3分钟,我将提供代码示例正则表达式中“/”字符的作用的一部分?我从未使用过PHP,但“H.*D.*N.*G.*L.*Y”是一个正确的匹配正则表达式,可以满足您的需要。“/”用作Strings中表达式的开始-结束符号我已通过将$str2转换为模式来更新我的答案正则表达式中的“/”字符做了什么?我从未使用过PHP,但“H.*D.*N.*G.*L.*Y”是一个正确的匹配正则表达式,可以满足您的需要。“/”用作Strings中表达式的开始-结束符号我已经更新了我的答案,将$str2转换为模式。确切地说,这将是最快、最漂亮的检查方法。是的,这要快得多,尤其是当运行在488meg文件的字符串我有!!!谢谢大家:准确地说,这将是最快、最漂亮的检查方法。是的,这要快得多,尤其是当运行我拥有的488meg字符串文件时!!!谢谢大家:D