如何在Regex php中的文本的前20个单词中匹配一个单词?

时间:2018-12-01 14:35:25

标签: regex

我查看了其他类似的问题,但它们在正则表达式测试中无效。

请发布有效的公式。谢谢

1 个答案:

答案 0 :(得分:0)

您的正则表达式几乎是正确的,但几乎不需要修改。代替这个,

 ^(?:\w+\s*){0,20}(food)

您应该使用此

^(\w+\W+){0,19}food

在正则表达式中,您写了{0,20},实际上已经可以算出20个单词,而您的食物就变成了第21个单词,因此该单词应该与您在帖子中写到的匹配单词food的前20个单词不匹配。因此,确切地说,您应该将其更正为{0,19}。

第二个问题是,因为您在正则表达式中写了\w+\s*,所以如果您的行中包含除了单词字符或空格之外的任何内容(可能是标点符号,句号或感叹号等),那么此正则表达式将不匹配。要覆盖其他任何字符,您应安全使用\W字符,该字符应与任何非单词字符匹配。

正如某人在评论中所说,您应从正则表达式的开头删除^以使其匹配,但随后可能会匹配,但不是从前二十个单词开始,而是会找到任何此类单词文本中间的错误模式。因此,请保留插入符号^(也称为开始锚点),以便仅从前20个字符开始进行匹配。

Demo

让我知道这是否是您一直在寻找的东西。