Php 搜索字符串中的字符
我如何搜索字符串1以查看它是否按字符串2中存在的顺序包含字符串2中的所有字符,并返回true或false值 感谢您的帮助:D 如果这有帮助的话,这就是我今天要讲的代码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.和预匹配 在第二个字符串中添加*应该很容易。假设您的
$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