0

我想检查一些句子的第一个单词。如果第一个单词是For, And, Nor, But, Or, 等,我想跳过这句话。

这是代码:

<?php
  $sentence = 'For me more';
  $arr = explode(' ',trim($sentence));
  if(stripos($arr[0],'for') or stripos($arr[0],'but') or stripos($arr[0],'it')){
    //doing something
  }
?>

空白结果,怎么了?谢谢你 :)

4

3 回答 3

2

Stripos 返回大海捞针中第一次出现的位置。第一次出现在位置 0,计算结果为 false。

试试这个作为替代方案

$sentence = 'For me more';

// make all words lowercase
$arr = explode(' ', strtolower(trim($sentence)));

if(in_array($arr[0], array('for', 'but', 'it'))) {
   //doing something
   echo "found: $sentence";
} else {
   echo 'failed';
}
于 2012-10-29T22:55:25.460 回答
2

preg_filter如果您要知道要评估的字符串是什么(即您不需要解析句子),也许可以使用。

$filter_array = array(
    '/^for\s/i',
    '/^and\s/i',
    '/^nor\s/i',
    // etc.
}

$sentence = 'For me more';

$result = preg_filter(trim($sentence), '', $filter_array);

if ($result === null) {
    // this sentence did not match the filters
}

这使您可以确定一组过滤器正则表达式模式以查看是否有匹配项。请注意,在这种情况下,我只是用作''“替换”值,因为您并不真正关心实际进行替换,此函数只是为您提供了一种传入正则表达式数组的好方法。

于 2012-10-29T22:58:28.883 回答
2

在这里,stripos如果找到单词(在位置 0 找到),将返回 0。

如果找不到该单词,则返回 false。

你应该写:

if(stripos($arr[0],'for') !== false or stripos($arr[0],'but') !== false or stripos($arr[0],'it') !== false){ 
  //skip 
}
于 2012-10-29T22:51:43.727 回答