伪代码
text = "I go to school";
word = "to"
if ( word.exist(text) ) {
return true ;
else {
return false ;
}
我正在寻找一个PHP函数,如果文本中存在单词,则返回true。
答案 0 :(得分:104)
根据您的需要,您有几个选择。对于这个简单的例子,strpos()
可能是最简单,最直接的函数。如果您需要对结果执行某些操作,可能需要strstr()
或preg_match()
。如果你需要使用复杂的模式而不是字符串作为针,你需要preg_match()
。
$needle = "to";
$haystack = "I go to school";
strpos() and stripos()方法(stripos()不区分大小写):
if (strpos($haystack, $needle) !== false) echo "Found!";
strstr() and stristr() method(stristr不区分大小写):
if (strstr($haystack, $needle)) echo "Found!";
preg_match method(正则表达式,更灵活但运行速度更慢):
if (preg_match("/to/", $haystack)) echo "Found!";
因为你要求一个完整的功能,所以你可以把它放在一起(使用针和干草堆的默认值):
function match_my_string($needle = 'to', $haystack = 'I go to school') {
if (strpos($haystack, $needle) !== false) return true;
else return false;
}
答案 1 :(得分:14)
function hasWord($word, $txt) {
$patt = "/(?:^|[^a-zA-Z])" . preg_quote($word, '/') . "(?:$|[^a-zA-Z])/i";
return preg_match($patt, $txt);
}
如果$ word为“to”,则匹配:
但不是:
答案 2 :(得分:12)
使用:
return (strpos($text,$word) !== false); //case-sensitive
或
return (stripos($text,$word) !== false); //case-insensitive
答案 3 :(得分:5)
<?php
$text = "I go to school";
$word = "to"
$pos = strpos($text, $word);
if ($pos === false) {
return false;
} else {
return true;
}
?>
答案 4 :(得分:3)
$text="I go to school";
return (strpos($text, 'to')!== false);
The manual page you need to find the correct usage of strpos
答案 5 :(得分:2)
另一种方式(除了已经给出的strpos示例之外,还使用'strstr'函数:
if (strstr($haystack, $needle)) {
return true;
} else {
return false;
}
答案 6 :(得分:1)
您可以使用这些字符串函数
strstr - 查找第一个字符串
stristr - 不区分大小写的strstr()
strrchr - 查找字符串中最后一个字符
strpos - 查找字符串
中第一次出现子字符串的位置strpbrk - 在字符串中搜索任何一组字符
如果这没有帮助,那么您应该使用preg
正则表达式
preg_match - 执行正则表达式匹配
答案 7 :(得分:0)
不能'我们只是做
"/(?:^|\w+)" . preg_quote($word, '/') . "(?:$|\w+)/i"
这样它可以检查开始或空白,结束或空格。
答案 8 :(得分:0)
经过多次搜索以获得合适的php版本后,我决定编写自己的包含函数(带有多个参数针),并且很好记住。
function contains($str,$contain)
{
if(stripos($contain,"|") !== false)
{
$s = preg_split('/[|]+/i',$contain);
$len = sizeof($s);
for($i=0;$i < $len;$i++)
{
if(stripos($str,$s[$i]) !== false)
{
return(true);
}
}
}
if(stripos($str,$contain) !== false)
{
return(true);
}
return(false);
}
php的描述包含:
contains($str,$arg)
$str: The string to be searched
$arg: The needle, more arguments divided by '|'
示例:
$str = 'green house';
if(contains($str,"green"))
echo "we have a green house.";
else
echo "our house isn't green";
$str = 'green, blue, red houses';
if(contains($str,"green|red"))
echo "we have a green or red house.";
else
echo "we have a blue house.";
答案 9 :(得分:0)
在php中使用strpos
函数。
$text = "I go to school";
$word = "to"
if (strpos($text,$word)) {
echo 'true';
}
答案 10 :(得分:-2)
str_contains()在PHP 8中
https://wiki.php.net/rfc/str_contains
不到25年之后,他们在PHP中添加了(https://github.com/php/php-src/commit/1668ad7cb17213e67e42994e0c6911e302a3c3c5)一个函数,用于检查另一行中是否包含一行。
str_contains(字符串$干草堆,字符串$针):布尔值
handleInput = (e) => {
const key = e.target.name;
if (!key) { return; }
const value = e.target.value ? parseFloat(e.target.value) : 0;
const oldValue = this.state[key] ? this.state[key] : 0;
const total = (this.state.total - this.state[key]) + value;
console.log('key: ', key, ' value: ', value, ' total: ', total);
this.setState({ [key]: value, total })
}
当然,这只是等效的。 strpos($干草堆,$针)! ==错误 却是一件小事。
作为使用字符串的替代方法,已经有symfony /字符串(https://github.com/symfony/string)或例如voku / Stringy(https://github.com/voku/Stringy/)。