preg_match 而关键字附加到其他内容
preg_match while the keyword attached to something else
假设我有一个很长的字符串,我想以包含关键字的方式对其进行切割(关键字基于一种模式,例如{query:ABCD:1234}),关键字前5个字和后面5个字。如果关键字单独出现,我可以使用此正则表达式找到它:
preg_match("/(([^ ]+ ){5})$keyword (([^ ]+ ){5})/", $text, $matches);
但是如果关键字附加了一些其他字符(例如逗号或点),则上述正则表达式无法找到它。如果我将正则表达式更改为这个:
preg_match("/(([^ ]+ ){5})$keyword(([^ ]+ ){5})/", $text, $matches);
它找到附加到逗号的关键字,但不是单独的。
如何使用正则表达式同时涵盖关键字和附件这两种情况?
感谢 Wiktor Stribiżew,这个正则表达式将修复它:
"/((?:\w+\W+){5})" . preg_quote($keyword, "/") . "((?:\W+\w+){5})/"
您可以使用
preg_match("/((?:\w+\W+){5})" . preg_quote($keyword, "/") . "((?:\W+\w+){5})/", $text, $matches);
模式现在将匹配:
((?:\w+\W+){5})
- 第 1 组:任何 1+ 个单词字符出现 5 次,后跟 1+ 个非单词字符
preg_quote($keyword, "/")
- 包含所有特殊字符和转义正则表达式定界符的 $keyword
文本
((?:\W+\w+){5})
- 第 2 组:出现 5 次任何 1+ 非单词字符后跟 1+ 单词字符
假设我有一个很长的字符串,我想以包含关键字的方式对其进行切割(关键字基于一种模式,例如{query:ABCD:1234}),关键字前5个字和后面5个字。如果关键字单独出现,我可以使用此正则表达式找到它:
preg_match("/(([^ ]+ ){5})$keyword (([^ ]+ ){5})/", $text, $matches);
但是如果关键字附加了一些其他字符(例如逗号或点),则上述正则表达式无法找到它。如果我将正则表达式更改为这个:
preg_match("/(([^ ]+ ){5})$keyword(([^ ]+ ){5})/", $text, $matches);
它找到附加到逗号的关键字,但不是单独的。
如何使用正则表达式同时涵盖关键字和附件这两种情况?
感谢 Wiktor Stribiżew,这个正则表达式将修复它:
"/((?:\w+\W+){5})" . preg_quote($keyword, "/") . "((?:\W+\w+){5})/"
您可以使用
preg_match("/((?:\w+\W+){5})" . preg_quote($keyword, "/") . "((?:\W+\w+){5})/", $text, $matches);
模式现在将匹配:
((?:\w+\W+){5})
- 第 1 组:任何 1+ 个单词字符出现 5 次,后跟 1+ 个非单词字符preg_quote($keyword, "/")
- 包含所有特殊字符和转义正则表达式定界符的$keyword
文本((?:\W+\w+){5})
- 第 2 组:出现 5 次任何 1+ 非单词字符后跟 1+ 单词字符