检查子字符串是否包含在实际字符串中的任何位置


Check if substring is contained anywhere in the actual string

>我有以下字符串:

$str = "A string".

当我使用:

preg_match("/A string/", $str)

我得到了匹配,一切正常,但我想对另一个字符串使用相同的正则表达式:

$str2 = "A test string".

对于这种情况,我可以使用:

"/A (test  )?string/"

但我希望它更复杂,它也应该能够匹配这样的字符串,例如:

一个ST测试测试一个字符串

我的意思是子字符串"测试"可以出现在主题中的任何位置。

甚至有可能为此找到正则表达式吗?

你可以尝试这样的事情

$str = "My test String";
    if (strpos($str, 'test') !== false) {
        echo 'true';
    }

试试这个:

$str = "A sttest ring";
$newstr = preg_replace("/'s*test's*/", "", $str);
preg_match("/A string/", $newstr, $matches);
echo $matches ? 'true' : 'false';

在线演示

我会为此创建一个函数:

function containsLetters($testString, $lettersString, $caseSensitive = false, $whiteSpaces = false){
  if(!$caseSensitive){
    $testString = strtolower($testString); $lettersString = strtolower($lettersString);
  }
  if($whiteSpaces){
    $tw = $testString; $lw = $lettersString;
  }
  else{
    $tw = preg_replace('/'s/', '', $testString); $lw = preg_replace('/'s/', '', $lettersString);
  }
  $tst  = str_split($tw); $ltr = str_split($lw); $c = count($ltr); $r = array();
  foreach($ltr as $l){
    foreach($tst as $i => $t){
      if($l === $t){
        $a = array_splice($tst, $i, 1); $r[] = $a[0];
      }
    }
  }
  if(count($r) >= $c){
    return true;
  }
  return false;
}
$test = containsLetters('A sttest ring', 'a test string');

只需将true传递给第三个参数即可使其区分大小写。此外,true传递给第 4 个参数以比较空格。