2015-01-12 3 views
0

У меня есть строка, которую я хочу точно совместить.Использование переменной в точном совпадении 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

Где я буду неправильно?

+1

'preg_match ('\ Ь /. Preg_quote ($ Findstr). \ Б /', $ строка ...)' – CD001

ответ

3

Вам не нужно ставить шаблон внутри класса символов.

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

ИЛИ

Я думаю, что проблема только с классом [] символов. Нижеследующее прекрасно работает для меня. Обратите внимание, что всякий раз, когда переменная используется внутри регулярного выражения, вы должны заключить шаблон или регулярное выражение в двойные кавычки, а не одинарные кавычки. Поскольку одинарные кавычки не будут расширять переменные.

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

@ Jonny5 yep, он работает. Проблема только в классе '[]' char. –

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

Это быстрее, чем при использовании "preg_match", но OP просил решение RegExp , –

1

Вот код:

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