php - 如何使 PHP 正则表达式选项组不急切?

标签 php regex nlp

我有一个正则表达式,用于查找以 ngram 选项组结尾的模式。这是正则表达式:

$regex = '/.{0,150}\b(is (.{0,50}?)\b(assembler|builder|consulter|contracter|contractor|contract manufacturer|converter|designer|distributer|distributor|engineerer|fabricater|fabricator|formulater|formulator|installer|machiner|manufacturer|offerer|producer|provider|reseller|seller|supplier|wholesaler|machine shop|job shop|law firm|marketer|marketing agency))\b([^.!?<>]{0,150})\b/'

这是我要匹配的字符串:

$string = 'ABC Company Inc. is a Distributor, Fabricator, and Manufacturer of textiles. Another sentence.';

目标是使用正则表达式的第一个捕获组提取“是分销商、制造商和制造商”。正则表达式的其余部分只是定义上下文,理想情况下,通常在句子末尾或特定长度之后结束。

现在,我的第一个捕获组很急切,并且仅匹配“是经销商”。我怎样才能让这个不急切?

最佳答案

没有重复的较短版本(不在代码标签中,因为一行不可读):

.{0,150}\b(is([^.!?<>]{0,50}(assembler|builder|consulter|contracter|contractor|contract manufacturer|converter|designer|distributer|distributor|engineerer|fabricater|fabricator|formulater|formulator|installer|machiner|manufacturer|offerer|producer|provider|reseller|seller|supplier|wholesaler|machine shop|job shop|law firm|marketer|marketing agency))+)\b([^.!?<>]{0,150}\b)

这个想法是在每个关键字之前允许不超过 50 个符号的前缀(幸运的是,只有一个这样的常量,因此很容易找到它),无论它是否是枚举中的另一个关键字。为了捕获枚举,我在关键字列表后添加了 +)

检查here .

关于php - 如何使 PHP 正则表达式选项组不急切?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29398410/

相关文章:

nlp - "fine-tuning of a BERT model"指的是什么?

nlp - 使用 OpenNLP 链接多个名称查找器实体

php - "Undefined property"尝试通过 php 将 javascript 表单数据保存到 mysql 数据库时

javascript - JS RegExp() 用于查找出现的情况

python - Python 上的正则表达式在使用 char 类时打印垃圾

python - Python Re Module 在这个例子中是如何工作的?

php - 使用 php 将 csv 导入 mysql 并

php - 检查您的 PHP 是由 Cron 作业还是 HTTP 请求运行的最正确方法是什么?

php - 支持 SVN 和 FTP 的快速 Windows PHP 编辑器?

regex - 使用 Regex 删除括号和其中的所有内容