我无法使用 php 中括号中的词进行搜索
I can not do a search with words in brackets in php
我创建了一个函数来检查数组中是否有一些单词。我想在方括号 "[ ]" 内搜索单词。
示例:[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.'\]/';
此外,您可以忽略 upper/lower 大小写,在分隔符后添加 i
修饰符:
$er = '/\['.$term.'\]/i';
顺便说一句,当对字符串使用双引号时,您可以使用花括号代替连接。这叫做变量插值:
$er = "/\[{$term}\]/i";
我创建了一个函数来检查数组中是否有一些单词。我想在方括号 "[ ]" 内搜索单词。 示例:[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.'\]/';
此外,您可以忽略 upper/lower 大小写,在分隔符后添加 i
修饰符:
$er = '/\['.$term.'\]/i';
顺便说一句,当对字符串使用双引号时,您可以使用花括号代替连接。这叫做变量插值:
$er = "/\[{$term}\]/i";