Я создал функцию для проверки наличия нескольких слов в массиве. Я хочу выполнить поиск слов в квадратных скобках "[]". Пример: [dar], [como], [amar]...
Для этого я использую функцию preg_match() для проверки любого из слов в массиве. Однако функция принимает проверку слов без скобок.
Пример: слово "darkgreen" принято, потому что оно сначала "dar", но я просто хочу принять слово "[dar]"
Это мой код и образец текста, где выполняется проверка:
Мой код:
private function checkTerms($post){
$out= array();
foreach ($this->terms as $term) {
$er = "[".$term."]";
if(preg_match($er,$post)){
$out[] = $term;
}
}
return $out;
}
Пример массива:
<dl>
<dt><b><font color="maroon">como</font></b>
<font color="maroon">[como]</font> <rel> <ks> <font color="blue"><b>ADV</b> </font> <font color="darkgreen">@ADVL></font> <font color="darkgreen"><b>@#FS-ADVL</font></b> <font color="darkgreen"><b>@#FS-N<</font></b>
<dt><b><font color="maroon">não</font></b>
<font color="maroon">[não]</font> <font color="blue"><b>ADV</b> </font> <font color="darkgreen">@ADVL></font>
<dt><b><font color="maroon">amar</font></b>
<font color="maroon">[amar]</font> <vt> <font color="blue"><b>V</b> FUT 1/3S SUBJ VFIN </font> <font color="darkgreen">@FMV</font>
<dt><b><font color="maroon">uma</font></b>
<font color="maroon">[um]</font> <arti> <font color="blue"><b>DET</b> F S </font> <font color="darkgreen">@>N</font>
<dt><b><font color="maroon">pessoa</font></b>
<font color="maroon">[pessoa]</font> <H> <font color="blue"><b>N</b> F S </font> <font color="darkgreen">@<ACC</font>
<dt><b><font color="maroon">tão</font></b>
<font color="maroon">[tão]</font> <dem> <quant> <font color="blue"><b>ADV</b> </font> <font color="darkgreen">@>A</font>
<dt><b><font color="maroon">linda</font></b>
<font color="maroon">[lindo]</font> <font color="blue"><b>ADJ</b> F S </font> <font color="darkgreen">@N<</font>
<dt><b><font color="maroon">.</font></b>
</dl>
Вам нужно скрыться ]
и [
в ваших регулярных выражениях, потому что они имеют свой смысл. Используйте \
в качестве экранирующего символа для этого. Попробуйте что-нибудь вроде:
$er = '/\['.$term.'\]/';
Кроме того, вы можете игнорировать верхний/нижний регистр, добавляя модификатор i
после разделителя:
$er = '/\['.$term.'\]/i';
Кстати, при использовании двойных кавычек для строк вы можете использовать фигурные скобки в качестве замены конкатенации. Это называется переменной интерполяцией:
$er = "/\[{$term}\]/i";
str(i)pos(...) !== false