Я не могу сделать поиск со словами в скобках в php

1

Я создал функцию для проверки наличия нескольких слов в массиве. Я хочу выполнить поиск слов в квадратных скобках "[]". Пример: [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>  &lt;rel&gt; &lt;ks&gt; <font color="blue"><b>ADV</b> </font> <font color="darkgreen">@ADVL&gt;</font> <font color="darkgreen"><b>@#FS-ADVL</font></b> <font color="darkgreen"><b>@#FS-N&lt;</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&gt;</font>
    <dt><b><font color="maroon">amar</font></b> 

    <font color="maroon">[amar]</font>  &lt;vt&gt; <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>  &lt;arti&gt; <font color="blue"><b>DET</b> F S </font> <font color="darkgreen">@&gt;N</font>
    <dt><b><font color="maroon">pessoa</font></b> 

    <font color="maroon">[pessoa]</font>  &lt;H&gt; <font color="blue"><b>N</b> F S </font> <font color="darkgreen">@&lt;ACC</font>
    <dt><b><font color="maroon">tão</font></b> 

    <font color="maroon">[tão]</font>  &lt;dem&gt; &lt;quant&gt; <font color="blue"><b>ADV</b> </font> <font color="darkgreen">@&gt;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&lt;</font>
    <dt><b><font color="maroon">.</font></b> 

    </dl>
  • 3
    Вам необходимо перечитать документацию preg_match (отсутствует разделитель и экранирование). В любом случае, если вы просто хотите проверить, является ли строка (против шаблона) частью другой строки, используйте str(i)pos(...) !== false
  • 0
    Спасибо чувак!! сработало.
Теги:
arrays
search
preg-match

1 ответ

1
Лучший ответ

Вам нужно скрыться ] и [ в ваших регулярных выражениях, потому что они имеют свой смысл. Используйте \ в качестве экранирующего символа для этого. Попробуйте что-нибудь вроде:

$er = '/\['.$term.'\]/';

Кроме того, вы можете игнорировать верхний/нижний регистр, добавляя модификатор i после разделителя:

$er = '/\['.$term.'\]/i';

Кстати, при использовании двойных кавычек для строк вы можете использовать фигурные скобки в качестве замены конкатенации. Это называется переменной интерполяцией:

$er = "/\[{$term}\]/i";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню