1

不幸的是,由于某些奇怪的原因,正则表达式方法不适用于 UTF-8 (preg_replace + UTF-8 在一台服务器上不起作用,但在另一台服务器上起作用)。

在不使用正则表达式的情况下实现我的目标的最有效方法是什么?

只是为了尽可能清楚,对于以下一组词:
猫,狗,天空

猫会返回假
天空是蓝色会返回真
天际会返回假

4

3 回答 3

1

我最初的想法是在空格上爆炸文本,然后检查结果数组中是否存在您的单词。当然,您可能有一些标点符号泄漏到您的数组中,您也必须考虑这些。

另一个想法是检查strpos单词的。如果找到,请测试下一个字符是否为字母。如果是一封信,你就知道你找到了一个词的潜台词,并丢弃这个发现。

// Test online at http://writecodeonline.com/php/

$aWords = array( "I", "cat", "sky", "dog" );
$aFound = array();
$sSentence = "I have a cat. I don't have cats. I like the sky, but not skyrim.";

foreach ( $aWords as $word ) {
  $pos = strpos( $sSentence, $word );
  // If found, the position will be greater than or equal to 0
  if ( !($pos >= 0) ) continue;
    $nextChar = substr( $sSentence , ( $pos + strlen( $word ) ), 1 );
    // If found, ensure it is not a substring
    if ( ctype_alpha( $nextChar ) ) continue;
      $aFound[] = $word;
}

print_r( $aFound ); // Array ( [0] => I [1] => cat [2] => sky )

当然,更好的解决方案是确定为什么不能使用正则表达式,因为这些解决方案远没有模式搜索那么有效。

于 2012-04-10T01:33:57.450 回答
1

超级简短的例子,但这是我没有正则表达式的方式。

$haystack = "cats"; //"the sky is blue"; // "skyrim";
$needles = array("cat", "dog", "sky");

$found = false;
foreach($needles as $needle)
    if(strpos(" $haystack ", " $needle ") !== false) {
        $found = true;
        break;
    }


echo $found ? "A needle was found." : "A needle was not found.";
于 2012-04-10T01:47:35.497 回答
0

如果您只是想查找一个单词是否在字符串中,您可以将字符串存储在变量中(如果打印字符串,则打印带有字符串的变量)并使用“in”。例子:

a = 'The sky is blue'
The in a
True
于 2014-03-04T01:15:35.353 回答