不幸的是,由于一些奇怪的原因,正则表达式方法对我来说不适用于UTF-8(preg_replace + UTF-8 doesn't work on one server but works on another)。
在不使用正则表达式的情况下实现目标的最有效方法是什么?
尽可能清楚地表达以下一组词:
猫,狗,天空
答案 0 :(得分: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 )
当然,更好的解决方案是确定无法使用正则表达式的原因,因为这些解决方案将无法像模式搜索那样高效。
答案 1 :(得分: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.";
答案 2 :(得分:0)
如果你只是想找到一个单词在一个字符串中,你可以将字符串存储在一个变量中(如果打印字符串打印变量,而字符串在里面),并使用“in”。例如:
a = 'The sky is blue'
The in a
True