在 PHP 中搜索不正确的空格字符串


search for non-whitespace-correct strings in PHP

我有一个项目,我需要在大量文本中查找字符串的出现。 已知搜索字符串存在于较大的文本中,但是由于我无法控制的原因,它们不是空格正确的,因为它们在某些单词之间缺少空格。

例如,我要找到的字符串是(不是棕色狐狸之间缺少空格:

quick brownfox jumps

我需要在以下位置找到它:

The quick brown fox jumps over the lazy dog.

我需要能够修改大海捞针以用识别标签包装找到的术语,所以我最终会得到这样的东西:

The <span class="found">quick brown fox jumps</span> over the lazy dog.

我已经考虑过在自由间距模式下使用正则表达式,这似乎不能完全满足我的需求,我考虑从搜索词中删除所有空格并在每个字符之间添加 ''s*,但认为这可能会对性能产生可怕的影响(任何正则表达式专家都可以确认或否认这一点吗?

是否有任何可能的非正则表达式解决方案可供研究。

谢谢

在这种情况下,最好的方法是删除搜索字符串和目标字符串中的所有空格。然后检查字符串是否存在:

$haystack = 'The quick brown fox jumps over the lazy dog.';
$needle = 'quick brownfox jumps';
$haystack = preg_replace("'s+", "", $haystack);
$needle = preg_replace("'s+", "", $needle);
if (strpos($haystack, $needle) !== false) {
    echo 'true';
}

你不能像其他人所说的那样从大海捞针中剥离空白。您的搜索字符串,即使它的空格不可靠,仍然是一系列离散的单词。如果我们假设大海捞针中的空格是正确的,这意味着要查找的字符串将被大海捞针中的非单词字符包围。通过剥离空格,您将失去检查该空白的能力,并且将获得不必要的误报。

像''Ws''W*t''W*r''W*i''W*n''W

*g''W这样的东西可以工作,但它不是很干净。如果要在不使用正则表达式的情况下实现解决方案,则可以遍历大海捞针中的每个单词,并将其与搜索字符串的前 n 个字符进行比较,然后尝试将后续单词与搜索字符串的其余部分匹配。一旦你找到一个不匹配的字符,你跳过单词的其余部分,开始检查下一个。仅当搜索字符串的最后一个字符与大海捞针中的单词结尾匹配时,它才会返回完全匹配项。