获取字符串中的当前+下一个单词

时间:2012-09-30 23:40:58

标签: php string

这是我试图得到的: 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 lonMy 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);
}  }    

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

3 个答案:

答案 0 :(得分:3)

您可以尝试使用explode

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

您可以使用不区分大小写的preg_match_all

将i提升到新的水平
$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+与单词字符匹配。

这增加了一些新的语法来学习。但是比完成变通方法和更长的字符串函数代码要脆弱得多。