使用strpos在字符串中查找带有转义撇号的单词


Finding a word with an escaped apostrophe in a string using strpos

字符串中有一个带转义撇号的单词。我试图使用strpos来确定带有转义撇号的单词是否在字符串中。不幸的是,每次都是假的。我做错了什么?我试过了,在strpos中,1个转义斜杠,2个转义斜杠,一直到5,但每次都返回false。

$text = "example''s";
$text = " ".$text." ";
if (strpos($text, " example''''''s ")) {
echo "true.";
}
else {
echo "false.";
}

这里有两个问题-第一个是字符串的转义,第二个是基于strpos函数返回的逻辑。

第一个问题是,您不需要将搜索输入转义到strpos -它不是一个正则表达式函数!

第二个问题是(未转义的)搜索字符串将匹配位置0,PHP也将其解释为假值。

这里的PHP strpos文档声明:

警告这个函数可以返回布尔值FALSE,但也可以返回非布尔值FALSE。有关更多信息,请阅读布尔值部分。使用===操作符测试此函数的返回值。

使用下面的代码,应该可以正常工作:

$text = "example''s";
$text = " ".$text." ";
if (strpos($text, " example''s ") === false) {
    echo "false.";
} else {
    echo "true.";
}

===操作符是这里的关键-它表示相等的值和类型,因此它可以防止PHP解释器将零返回值视为等于false,否则它会这样做。

参见PHP的比较运算符参考:http://php.net/manual/en/language.operators.comparison.php

Edit:关于PHP认为为假的值的进一步信息:-

当转换为布尔值时,以下值被认为是FALSE:

boolean FALSE本身

0 (0)

浮点数0.0 (0)

为空字符串,以及字符串"0"

包含零元素的数组

0成员变量的对象(仅限PHP 4)

特殊类型NULL(包括未设置的变量)

从空标签创建的SimpleXML对象

所有其他值都被认为是TRUE(包括任何资源)。

警告:-1被认为是TRUE,就像任何其他非零(无论是正数还是负数)数一样!

从:http://php.net/manual/en/language.types.boolean.php