在完全匹配正则表达式中使用变量

时间:2015-01-12 15:32:26

标签: php regex

我有一个我想要完全匹配的字符串。

到目前为止我的代码:

<?php

$string = "Such asinine comments such as";
$findStr = "such as";

$result = preg_match("/[\b$findStr\b]/i", $string, $matches, PREG_OFFSET_CAPTURE, $offset);
//$result = preg_replace("/^$findStr$/i", "such&#160;as", $string);
echo $result;
echo "Offset = ".$offset."\n";
var_dump($result);
var_dump($matches);

?>  

我得到的输出:

1Offset = 
int(1)
array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(1) " "
    [1]=>
    int(4)
  }
}  

我可以做些什么来获得完全匹配? 到目前为止,我已经尝试了以下正则表达式:
/\b[$findStr]\b/i
/^$findStr$/i
#$findStr#i

我哪里错了?

3 个答案:

答案 0 :(得分:5)

对于完全匹配,您不需要正则表达式。你可以使用strpos()

$pos = strpos($string, $findStr);

// Note our use of ===.  Simply == would not work as expected
// because the position might be the 0th (first) character.
if ($pos === false) {
    //string not found
} else {
    //string found at position $pos
}

答案 1 :(得分:3)

您不需要将模式放在角色类中。

preg_match("~\b".$findStr."\b~i", $string, $matches, PREG_OFFSET_CAPTURE, $offset);

OR

我认为问题仅出在[]字符类上。以下工作对我来说很好。请注意,只要在正则表达式中使用变量,就必须将模式或正则表达式括在双引号内而不是单引号。因为单引号不会扩展变量。

preg_match("~\b$findStr\b~i", $string, $matches, PREG_OFFSET_CAPTURE, $offset);

答案 2 :(得分:1)

以下是代码:

<?php
$string = 'Test Case';
$search_term = 'Test';
if(preg_match("~\b" . $search_term . "\b~", $string)){
  echo "Matched";
} else {
  echo "No match";
}
?>