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

时间:2016-03-08 23:09:16

标签: php regex string substring

我有以下字符串:

$str = "A string".

当我使用时:

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

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

$str2 = "A test string".

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

"/A (test  )?string/"

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

A sttest ring
test A string

我的意思是子字符串“test”可以出现在主题的任何地方。

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

3 个答案:

答案 0 :(得分:0)

你可以试试这样的事情

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

答案 1 :(得分:0)

试试这个:

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

Online Demo

答案 2 :(得分:0)

我会为此创建一个函数:

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传递给第3个参数即可使其区分大小写。另外,将true传递给第4个参数以比较空格。