php - preg_match 而关键字附加到其他东西
问题描述
假设我有一个很长的字符串,我想把它剪成包含一个关键字(关键字是基于一个模式,比如 {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+ 个单词字符出现 5 次,后跟 1+ 个非单词字符preg_quote($keyword, "/")
-$keyword
包含所有特殊字符和正则表达式分隔符的文本已转义((?:\W+\w+){5})
- Group 2: five occurrences of any 1+ non-word chars followed with 1+ word chars
推荐阅读
- arrays - 为什么切片的容量会发生变化?不应该一样吗?
- matrix - DolphinDB:使用矩阵 A 的重复副本创建一个大矩阵
- laravel - 共享主机 Laravel 8 主机问题:Symlink 不工作
- database - 如何使用 Beego 框架从源代码进行数据库迁移?
- ios - iOS:Google Sigin 错误,您的应用程序被阻止
- r - 从 R 中定位 pdf 表中的特定列
- css - CSS过渡动画导致页面残留边框线
- actions-on-google - 一项行动必须有多广泛才能被允许发布?
- python - 如何让 celery 优先处理任务?
- python - 熊猫数据框日期无法转换为日期时间格式