得到前后的消息

时间:2015-10-26 22:44:17

标签: arrays

我需要在字符串文本"globe"中获取"hello,planet,globe,city,country"之前和之后的字词。

  1. 所以,我试图在" ,globe,"之前得到这个词,直到上一个逗号,这意味着它应该返回"planet"。 我还需要返回下一个单词"city"

  2. 如果单词位于字符串的开头, 上一个单词应输入为"no word"。 如果单词位于字符串的末尾, 下一个单词应输入为"no word"

  3. 我该怎么做?提前致谢。这是preg_match最好的选择吗?

    $word = "fsdfs";
    $text = "hello,planet,globe,city,country";
    preg_match('/[$word]+/', $text, $match);
    //the above sentence is wrong but wanted to emphasise that $word needs to  mentioned in it 
    print_r($match);
    

3 个答案:

答案 0 :(得分:1)

^(.*?),?\s*globe\K(.*)$

您可以使用此功能并抓取捕获或群组。See demo.

$re = "/^(.*?),?\\s*globe\\K(.*)$/m"; 
$str = "hello,planet,globe,city,country\nglobe,city,country\nhello,planet,globe"; 

preg_match_all($re, $str, $matches);

答案 1 :(得分:0)

preg_match可能是错误的选择。

你有几个选择,你可以使用str_replace从字符串中删除'globe',然后你剩下的就是你想要的。

您还可以使用explode将字符串转换为数组并循环播放,当它与“globe”匹配时跳过它,您可以使用implode将其转换回字符串。

示例代码:

$text = "hello,planet,globe,city,country";

$text = explode(',' , $text);

$key = array_search ('globe', $text);//just globe, no comma

echo $key;//key is 2 so

if($key == 0) {
    //first word so
    //first word is 'no word
} else {
    echo $text[1]; //word before
}

//should also check array keys are set before using them
echo $text[3];//word after

更新:

$string = "hello,planet globe, city,country";

$regex = '/(?:[\w-]+ ){0,1}globe,(?: [\w-]+){0,1}/is';

preg_match_all($regex, $string, $matches);

echo '<pre>';
print_r($matches);
echo '</pre>';

答案 2 :(得分:0)

无需使用function get_left_right_word($text, $word) { $words = explode(',', $text); $i = array_search($word, $words); return array( $i === false || $i == 0 ? 'no word' : $words[i-1], $i === false || $i == count($words)-1 ? 'no word' : $words[i+1] ); } list($left_word, $right_word) = get_left_right_word('hello,planet,globe,city,country', 'globe'); echo 'left: '.$left_word.' right: '.$right_word; 。您可以拆分文本并搜索单词的索引,并在一些检查后返回左右单词。

left: planet right: city

这将打印

preg_match

如果您真的想使用function get_left_right_word($text, $word) { if (preg_match('/(?:(?<left>\w+),)?'.preg_quote($word, '/').'(?:,(?<right>\w+))?/', $text, $m)) { return array( isset($m['left']) && $m['left'] ? $m['left'] : 'no word', isset($m['right']) && $m['right'] ? $m['right'] : 'no word' ); } return array( 'no word', 'no word' ); } ,可以使用is as

session.get(url,params={...},)