Php 是否有一种更直接的方法可以在忽略空格的情况下搜索字符串?
我正在研究一个函数,该函数在字符串中搜索给定单词列表中的一个。正在搜索的字符串是由OCR软件生成的,它偶尔会在字母之间添加额外的空格(取决于字体),我需要忽略这些空格 我目前有一个函数如下所示:Php 是否有一种更直接的方法可以在忽略空格的情况下搜索字符串?,php,regex,Php,Regex,我正在研究一个函数,该函数在字符串中搜索给定单词列表中的一个。正在搜索的字符串是由OCR软件生成的,它偶尔会在字母之间添加额外的空格(取决于字体),我需要忽略这些空格 我目前有一个函数如下所示: function searchSomeText($searchTerms, $stringToBeSearched) { $matches = array(); for($i=0; $i < count($searchTerms); ++ $i) { $se
function searchSomeText($searchTerms, $stringToBeSearched)
{
$matches = array();
for($i=0; $i < count($searchTerms); ++ $i)
{
$searchTerms[$i] = substr(chunk_split($searchTerms[$i],1,"\s*"), 0, -3);
}
$searchTermsString = implode("|", $searchTerms);
if (preg_match("/\b($searchTermsString)\b/", $stringToBeSearched, $matches))
{
return $matches;
}
else { return false; }
}
函数searchSomeText($searchTerms,$stringToBeSearched)
{
$matches=array();
对于($i=0;$i
'\s*'
之外,还有什么方法可以忽略空格吗chunk\u split()
将其添加到每个字符后,然后从末尾将其切掉之外,还有没有更有效的方法将'\s*'
添加到搜索词中的每个字符后(但最后一个字符除外)我不希望只从
$stringtobearched
中删除空格,因为在大多数情况下,如果空格正确,我不希望搜索词包含在另一个单词中(因此'\b'
s)以下是我对您的任务的理解的推荐策略:
preg_quote()
\s*
(忽略转义斜杠)\s+
\b
)u
模式修饰符使用
str\u replace(“”,,$string)
修改$stringtobearched
可能会更容易、更有效,即使这不会“直接”回答您的问题。@Sam谢谢,在我的特殊情况下,这对我不起作用。我的实际代码比我的问题要复杂一点。我原以为简单一点的版本会让问题更清楚,但我现在要编辑它。嗯,一开始我什么都没想到。你的方法应该是可行的,但我同意这不是一个简单的方法,而且根据$searchTerms
和$stringToBeSearched
的长度可能会变得非常低效。如果这个问题包含@伊萨姆
function searchSomeText(array $searchTerms, string $stringToBeSearched): bool
{
foreach ($searchTerms as &$searchTerm) {
$searchTerm = preg_replace(
['/\\\\?\S\K(?=\S)/', '/\s+/'],
['\\s*', '\\s+'],
preg_quote($searchTerm, '/')
);
}
$pattern = '/\b(' . implode("|", $searchTerms) . ')\b/i';
echo $pattern . "\n";
return (bool)preg_match($pattern, $stringToBeSearched);
}
var_export(
searchSomeText(
['at', 'cat ', 'the'],
'The catheter in the hat'
)
);
/\b(a\s*t|c\s*a\s*t\s+|t\s*h\s*e)\b/i
true