preg_match,而关键字附加在其他内容上

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

假设我有一个长字符串,我想以某种方式将其剪切为包含一个关键字(关键字基于一种模式,例如{query:ABCD:1234}),该关键字前5个字,后面5个字它。如果关键字单独出现,我可以使用此正则表达式找到它:

preg_match("/(([^ ]+ ){5})$keyword (([^ ]+ ){5})/", $text, $matches);

但是,如果关键字附加了其他字符(例如逗号或点号),则上述正则表达式无法找到它。如果我将正则表达式更改为这一正则表达式:

preg_match("/(([^ ]+ ){5})$keyword(([^ ]+ ){5})/", $text, $matches);

它找到逗号后面的关键字,但不是一个。

我如何用正则表达式来解决这两种情况,单独使用关键字还是使用附件附加关键字?

php regex string preg-match
2个回答
0
投票
preg_match("/((?:\w+\W+){5})" . preg_quote($keyword, "/") . "((?:\W+\w+){5})/", $text, $matches);

模式现在将匹配:

[((?:\w+\W+){5})-组1:任何1+个单词字符的五个出现,后跟1+个非单词字符]

    [preg_quote($keyword, "/")-包含所有特殊字符和正则表达式分隔符的$keyword文本]
  • [((?:\W+\w+){5})-组2:任何1+个非单词字符的五个出现,后跟1+个单词字符]

-1
投票
"/((?:\w+\W+){5})" . preg_quote($keyword, "/") . "((?:\W+\w+){5})/"
© www.soinside.com 2019 - 2024. All rights reserved.