PHP中如何用正则表达式分离出某个关键词前后的文字?

比如有一篇中文文章,我的关键词是“域名”,并且“域名”这个词在这篇文章中多次出现。我想分离出每个“域名”左右的100个文字。用正则表达式如何做到?
多谢专家!太详细了!
“具体取关键词左右的文字是什么意思,是取该关键字前100个字,和该关键字后100个字码”:是这样的,就是取关键词前、后各一百个字。
剩下的我仔细琢磨琢磨~
======
另外,您的答案里的中文字,是按照GB码来算的吗?我看到操作字符串都是200~~那我要是用UTF8是不是就是300了?
=====
试了一下,截的还是有些问题...我这个问题不能用正则表达式直接截取吗?也就是用正则表达式直接把关键字左右各N个字截过来~
======
专家的方法可能过于高深-.-我是没琢磨透...yeahrahxephon同学的方法倒是不错,可有个问题,我有篇文章,里面有20个关键词,为什么在截取前后10个字的时候,能截取出15段(也就是数组里有15个),可改成50后,就只剩6个了,改成100后,只剩4个了。数组的大小有限制?
我明白了,是不是因为把截取范围改大了之后,关键词两边的句子重叠导致的这种情况?

$str_arr = preg_split('|域名|',$str);
这种简单的匹配不建议使用正则表达式,用php的explode()函数就可以了。
$str_arr = explode("域名",$str);
具体取关键词左右的文字是什么意思,是取该关键字前100个字,和该关键字后100个字码。如果是这样那就要用substr来截取一下了。注意要考虑汉字与字符的区别。
刚才测了一下,程序确实有点问题,现在修改一下。
function cnsubstr($str,$strlen=10) {//截取函数

if(empty($str)||!is_numeric($strlen)){
return false;
}
if(strlen($str)<=$strlen){
return $str;
}

//得到第$length个字符 并判断是否为非中文 若为非中文
//直接返回$length长的字符串
$last_word_needed=substr($str,$strlen-1,1);
if(!ord($last_word_needed)>128){
$needed_sub_sentence=substr($str,0,$strlen);
return $needed_sub_sentence;
}else{
for($i=0;$i<$strlen;$i++){
if(ord($str[$i])>128){
$i++;
}
}//end of for
$needed_sub_sentence=substr($str,0,$i);
return $needed_sub_sentence;
}
}
//程序部分
$str_arr = explode(",",$str);
$num = count($str_arr);
for($i=0;$i<$num;$i++){
if($i == 0){
$outstr = strrev(cnsubstr(strrev($str_arr[$i]),200));
}elseif($i == ($num-1)){
$outstr = cnsubstr($str_arr[$i],200);
}else{
$outstr1 = strrev(cnsubstr(strrev($str_arr[$i]),200));
$outstr = cnsubstr($str_arr[$i],5);
}
echo $outstr;
echo " <hr> ";
echo $outstr1;
echo " <hr> ";
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-22
<?php
$temp = '';
$str = '多谢专家!太详细了!
“具体取关键词左右的文字是什么意思,是取该关键字前100个字,和该关键字后100个字码”:是这样的,就是取关键词前、后各一百个字。
剩下的我仔细琢磨琢磨~
======
另外,您的答案里的中文字,是按照GB码来算的吗?我看到操作字符串都是200~~那我要是用UTF8是不是就是300了?
=====
试了一下,截的还是有些问题...我这个问题不能用正则表达式直接截取吗?也就是用正则表达式直接把关键字左右各N个字截过来~';
$str = mb_convert_encoding($str, "UTF-8", "GB2312");
preg_match_all("/(.{10}$temp.{10})/su", $str, $matches, PREG_SET_ORDER);
print_r($matches);
?>

这样?楼上回答的不是很好么。。。呵呵本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网