Regex 正则表达式,用于匹配文本中20个单词距离内的4个单词

Regex 正则表达式,用于匹配文本中20个单词距离内的4个单词,regex,string,pattern-matching,Regex,String,Pattern Matching,我正在尝试创建一个正则表达式,它可以在20个单词的距离内匹配文本中的4个单词,并且它们也应该是有序的 对于10个单词范围内的2个单词,我可以使用下面的 "\b(?:word1\W+(?:\w+\W+){0,10}?word2" 但无法获得匹配的4个单词,因此寻找建议 例如: 样本、常规、验证、转换-这4个单词应在以下文本的20个单词内出现 这是一个示例正则表达式文本。正则表达式用于字符串验证、解析和转换。术语“正则表达式”通常缩写为“RegEx”或“RegEx” 提前感谢。假设您希望在第一个单

我正在尝试创建一个正则表达式,它可以在20个单词的距离内匹配文本中的4个单词,并且它们也应该是有序的

对于10个单词范围内的2个单词,我可以使用下面的

"\b(?:word1\W+(?:\w+\W+){0,10}?word2"
但无法获得匹配的4个单词,因此寻找建议

例如:

样本、常规、验证、转换-这4个单词应在以下文本的20个单词内出现

这是一个示例正则表达式文本。正则表达式用于字符串验证、解析和转换。术语“正则表达式”通常缩写为“RegEx”或“RegEx”


提前感谢。

假设您希望在第一个单词和最后一个单词之间有20个单词,总共22个

您可以做的是检查第一个单词和最后一个单词是否在所需的单词距离内,并在第一个单词后使用a按所需顺序检查中间的两个单词,同时不通过使用负面外观标题跳过最后一个单词
(?!…)

在中,我放置了一些用于突出显示匹配的单词,并在最后一个单词模式中使用了
(?4)
,以缩短正则表达式

使用了
i(不区分大小写)
x(自由间距/注释模式)

您可以通过以下方法提高性能。仅仅删除引用也会使模式与其他正则表达式风格(如Javascript)更兼容


如果您使用的是PHP,只想检查这4个单词是否在所需的范围内,您还可以使用更简单的正则表达式,并使用
str\u word\u count()
对单词进行计数

$pattern='/\b示例\b.*?\b规则\b.*?\b验证\b.*?\b转换\b/is';

如果(preg_match($pattern,$str,$out)&(str_word_count($out[0]),非常感谢您的解决方案。它在一定程度上解决了我的问题,也帮助我理解如何处理这些问题。
/\b(sample)\W+                         # first word (group 1)
  (?=                                  # look ahead
    (?:(?!(?4))\w+\W+)*?(regular)\W+   # for word 2 (group 2)
    (?:(?!(?4))\w+\W+)*?(validation)   # for word 3 (group 3)
  )                                    # eof lookahead
(?:\w+\W+){0,20}?(transformation\b)    # last word (group 4)
/ix
$pattern = '/\bsample\b.*?\bregular\b.*?\bvalidation\b.*?\btransformation\b/is';

if(preg_match($pattern, $str, $out) && (str_word_count($out[0]) <= 22))
{ /* do something */ }