我有一个正则表达式,用于查找以 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/