永发信息网

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

答案:3  悬赏:60  手机版
解决时间 2021-03-12 14:33
  • 提问者网友:杀手的诗
  • 2021-03-12 10:35
比如有一篇中文文章,我的关键词是“域名”,并且“域名”这个词在这篇文章中多次出现。我想分离出每个“域名”左右的100个文字。用正则表达式如何做到?
多谢专家!太详细了!
“具体取关键词左右的文字是什么意思,是取该关键字前100个字,和该关键字后100个字码”:是这样的,就是取关键词前、后各一百个字。
剩下的我仔细琢磨琢磨~
======
另外,您的答案里的中文字,是按照GB码来算的吗?我看到操作字符串都是200~~那我要是用UTF8是不是就是300了?
=====
试了一下,截的还是有些问题...我这个问题不能用正则表达式直接截取吗?也就是用正则表达式直接把关键字左右各N个字截过来~
======
专家的方法可能过于高深-.-我是没琢磨透...yeahrahxephon同学的方法倒是不错,可有个问题,我有篇文章,里面有20个关键词,为什么在截取前后10个字的时候,能截取出15段(也就是数组里有15个),可改成50后,就只剩6个了,改成100后,只剩4个了。数组的大小有限制?
我明白了,是不是因为把截取范围改大了之后,关键词两边的句子重叠导致的这种情况?
最佳答案
  • 五星知识达人网友:蕴藏春秋
  • 2021-03-12 11:53
<?php
$temp = 'www.baidu.com';
$str = '多谢专家!太详细了!
“具体取关键词左右的文字是什么意思,是取该关键字前100个字,和该关键字后100个字码”:是这样的,就是取关键词前、后各一百个字。
剩下的我仔细琢磨琢磨~
======www.baidu.com
另外,您的答案里的中文字,是按照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);
?>

这样?楼上回答的不是很好么。。。呵呵
全部回答
  • 1楼网友:街头电车
  • 2021-03-12 14:21
$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> "; }
  • 2楼网友:大漠
  • 2021-03-12 13:00
asp我不会,不能给你详细的例子。给你个规则吧 这个只匹配a标签之间的颜色 $preg = '(.*?)<\/a>'; 这个匹配所有的颜色,包括word后面的 (.*?)<\/a>
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯