我无法在php中使用括号中的单词进行搜索

我无法在php中使用括号中的单词进行搜索,php,arrays,search,preg-match,Php,Arrays,Search,Preg Match,我创建了一个函数来检查数组中是否有单词。我想搜索方括号“[]”内的单词。 示例:[dar],[como],[amar] 为此,我使用preg_match()函数检查数组中的任何单词。但是,该函数接受不带括号的单词验证 示例:“darkgreen”一词之所以被接受,是因为它最初有“dar”,但我只想接受“[dar]”一词 这是我的代码和示例文本,在其中进行验证: 我的代码: private function checkTerms($post){ $out= array(); fo

我创建了一个函数来检查数组中是否有单词。我想搜索方括号“[]”内的单词。 示例:[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>

科莫
[como]rel ks ADV@ADVL@#FS-ADVL@#FS-N
não
[não]ADV@ADVL
阿马尔
[amar]vt V FUT 1/3S Subc VFIN@FMV
乌玛
[嗯]艺术设计公司
佩索阿
[pessoa]H N F S@ACC
托奥
[tão]dem quant ADV@A
琳达
[lindo]调整F S@N
. 

您需要在正则表达式中转义
]
[
,因为它们有自己的含义。请使用
\
作为转义字符。请尝试以下操作:

$er = '/\['.$term.'\]/';
此外,您还可以忽略在分隔符后添加
i
修饰符的大小写:

$er = '/\['.$term.'\]/i';
顺便说一句,当对字符串使用双引号时,可以使用大括号代替串联。这称为变量插值:

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

你需要重新阅读preg_match的文档(缺少delimeter和转义)。无论如何,如果你只想检查一个字符串(vs.pattern)是否是另一个字符串的一部分,请使用
str(i)pos(…)!==false
Thank man!!strop有效。