我需要在字符串文本"globe"
中获取"hello,planet,globe,city,country"
之前和之后的字词。
所以,我试图在" ,globe,"
之前得到这个词,直到上一个逗号,这意味着它应该返回"planet"
。
我还需要返回下一个单词"city"
。
如果单词位于字符串的开头,
上一个单词应输入为"no word"
。
如果单词位于字符串的末尾,
下一个单词应输入为"no word"
。
我该怎么做?提前致谢。这是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);
答案 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={...},)