使用preg_replace提取单词前后的字符串部分

问题描述 投票:0回答:2

我的文字很长,我想以某种方式将其切成一个特定的关键字,该关键字之前5个单词,之后5个单词。关键字包含一些特殊字符,如何通过PHP中的preg_match做到这一点?

我想搜索{query:some_text_goes_here:some_number_goes_here}模式。一个示例将是:

{query:this is a test:123456}

因此,考虑以下内容:

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc aliquam posuere efficitur. Maecenas interdum sem massa, eu tincidunt dolor lacinia quis. Fusce faucibus odio urna, eu consectetur enim congue in. Cras id neque nec urna pellentesque {query:this is a test:123456} feugiat. Etiam ut elit sed lectus tempor fringilla. Nullam metus lectus, ullamcorper eget interdum eu, volutpat convallis augue. Ut pretium accumsan felis a placerat. Aenean aliquam orci quis elementum tincidunt  

我想要的回报是:

id neque nec urna pellentesque {query:this is a test:123456} feugiat. Etiam ut elit sed
php regex string preg-match
2个回答
0
投票

您可以在php中使用像这样的preg_match

(?:\w+\W+(?:\w+\W+){0,4})?({query:this is a test:123456})(?:\W+\w+(?:\W+\w+){0,4})

所以您可以组合成这样的东西

preg_match('/(?:\w+\W+(?:\w+\W+){0,4})?({query:this is a test:123456})(?:\W+\w+(?:\W+\w+){0,4})/', $input_line, $output_array);

0
投票

这里是preg_replace,将所有捕获组替换为13

$keyword = preg_quote('{query:this is a test:123456}');
$text = preg_replace("/.*?(([^ ]+ ){5})$keyword (([^ ]+ ){5}).*/", '$1$3', $text);

这里是一个preg_match,使用比赛中的捕获组13

$keyword = preg_quote('{query:this is a test:123456}');
preg_match("/(([^ ]+ ){5})$keyword (([^ ]+ ){5})/", $text, $matches);
echo $matches[1].$matches[3];

这里是模式的说明:

.*(([^ ]+ ){5}){query:this is a test:123456} (([^ ]+ ){5}).*

“正则表达式可视化”

Debuggex Demo

© www.soinside.com 2019 - 2024. All rights reserved.