这是我试图得到的:
My longest text to test
当我搜索例如My
我应该My longest
我尝试使用此函数首先获得输入的完整长度然后我搜索''来剪切它。
$length = strripos($text, $input) + strlen($input)+2;
$stringpos = strripos($text, ' ', $length);
$newstring = substr($text, 0, strpos($text, ' ', $length));
但这仅适用于第一次,然后在当前输入后切断,意味着
My lon
为My longest
而不是My longest text
。
我必须如何改变这一点才能获得正确的结果,总是得到下一个字。也许我需要休息一下,但我找不到合适的解决方案。
更新
这是我的解决方法,直到找到更好的解决方案。正如我所说,使用数组函数不起作用,因为部分单词应该有效。所以我稍微扩展了我以前的想法。基本思想是在第一次和下一次之间有所不同。我改进了一些代码。
function get_title($input, $text) {
$length = strripos($text, $input) + strlen($input);
$stringpos = stripos($text, ' ', $length);
// Find next ' '
$stringpos2 = stripos($text, ' ', $stringpos+1);
if (!$stringpos) {
$newstring = $text;
} else if ($stringpos2) {
$newstring = substr($text, 0, $stringpos2);
} }
不漂亮,但嘿似乎工作^^。无论如何,也许你们中的某个人有更好的解决方案。
答案 0 :(得分:3)
您可以尝试使用explode
$string = explode(" ", "My longest text to test");
$key = array_search("My", $string);
echo $string[$key] , " " , $string[$key + 1] ;
您可以使用不区分大小写的preg_match_all
$string = "My longest text to test in my school that is very close to mY village" ;
var_dump(__search("My",$string));
输出
array
0 => string 'My longest' (length=10)
1 => string 'my school' (length=9)
2 => string 'mY village' (length=10)
使用的功能
function __search($search,$string)
{
$result = array();
preg_match_all('/' . preg_quote($search) . '\s+\w+/i', $string, $result);
return $result[0];
}
答案 1 :(得分:2)
一个简单的方法是将它拆分为空白并获取当前数组索引加上下一个:
// Word to search for:
$findme = "text";
// Using preg_split() to split on any amount of whitespace
// lowercasing the words, to make the search case-insensitive
$words = preg_split('/\s+/', "My longest text to test");
// Find the word in the array with array_search()
// calling strtolower() with array_map() to search case-insensitively
$idx = array_search(strtolower($findme), array_map('strtolower', $words));
if ($idx !== FALSE) {
// If found, print the word and the following word from the array
// as long as the following one exists.
echo $words[$idx];
if (isset($words[$idx + 1])) {
echo " " . $words[$idx + 1];
}
}
// Prints:
// "text to"
答案 2 :(得分:2)
有更简单的方法可以做到这一点。如果您不想查找特定内容,但删除预定义的某些内容,则字符串函数非常有用。否则使用正则表达式:
preg_match('/My\s+\w+/', $string, $result);
print $result[0];
此处My
查找字面上的第一个单词。对于某些空格,\s+
。虽然\w+
与单词字符匹配。
这增加了一些新的语法来学习。但是比完成变通方法和更长的字符串函数代码要脆弱得多。