2

这就是我试图得到的: 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 lonisMy longest和 not 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);
}  }    

不漂亮,但嘿,它似乎工作^^。无论如何,也许你们中的某个人有更好的解决方案。

4

3 回答 3

4

您可以尝试使用explode

$string = explode(" ", "My longest text to test");
$key = array_search("My", $string);
echo $string[$key] , " " , $string[$key + 1] ;

您可以使用不区分大小写的方式将 i 提升到一个新的水平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]; 
 }
于 2012-09-30T23:45:42.647 回答
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"
于 2012-09-30T23:45:05.717 回答
2

有更简单的方法可以做到这一点。如果您不想寻找特定的东西,但要剪掉某些东西的预定义长度,则字符串函数很有用。否则使用正则表达式:

 preg_match('/My\s+\w+/', $string, $result);

 print $result[0];

这里My寻找字面的第一个词。\s+对于某些空间。While\w+匹配单词字符。

这增加了一些新的语法来学习。但没有变通办法和更长的字符串函数代码来完成同样的事情那么脆弱。

于 2012-09-30T23:45:16.383 回答