$str1 = "HEADINGLEY";
$str2 = "HDNGLY";
如何查找字符串1以查看它是否包含字符串2中按字符串2存在的顺序中的所有字符并返回true或false值?
任何帮助表示赞赏:D
如果这有帮助,这就是我提供的代码..
echo preg_match('/.*H.*D.*N.*G.*L.*Y.*/', $str1, $matches);
返回0
答案 0 :(得分:1)
我想我会使用preg_match
http://us.php.net/manual/en/function.preg-match.php
...并使用$str2
将str_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
函数。
$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"