假设我有一个长字符串,我想以某种方式将其剪切为包含一个关键字(关键字基于一种模式,例如{query:ABCD:1234}),该关键字前5个字,后面5个字它。如果关键字单独出现,我可以使用此正则表达式找到它:
preg_match("/(([^ ]+ ){5})$keyword (([^ ]+ ){5})/", $text, $matches);
但是,如果关键字附加了其他字符(例如逗号或点号),则上述正则表达式无法找到它。如果我将正则表达式更改为这一正则表达式:
preg_match("/(([^ ]+ ){5})$keyword(([^ ]+ ){5})/", $text, $matches);
它找到逗号后面的关键字,但不是一个。
我如何用正则表达式来解决这两种情况,单独使用关键字还是使用附件附加关键字?
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+个单词字符]"/((?:\w+\W+){5})" . preg_quote($keyword, "/") . "((?:\W+\w+){5})/"