我有一个我想要完全匹配的字符串。
到目前为止我的代码:
<?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 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
我哪里错了?
答案 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";
}
?>