正则表达式 - 如何在文本的开头,中间或末尾找到单词并在其前面指定20个字母,然后指定20个字符

时间:2017-08-09 08:00:47

标签: regex

我正在使用它:

(\s*([a-z]\w+)){0,20}(class)(\s*([a-z]\w+)){0,20}

要在本文“示例文字”中找到“课程”:

class无论他是在创建一个对象,还是他是否在一个实例class method中。他不是,所以自我,如果它是有效的,指向对象,而不是class的实例无论他是否正在创建一个对象,而不管他是否在实例方法中。他不是,所以自我,如果它是有效的,则指向class object,而不是class he创建对象无关紧要的实例,而是他是否在一个实例中方法。他不是,所以自我,如果它有效,则指向class object,而不是class的实例

如果它们存在,我想选择'class'和前后20个字符

1 个答案:

答案 0 :(得分:4)

您可以使用以下正则表达式:

.{0,20}?\bclass\b.{0,20}

请参阅regex demo

<强>详情

  • .{0,20}? - 除了换行符之外的任何0到20个字符,因为很少
  • \bclass\b - 整个字class
  • .{0,20} - 除了换行符之外的任何0到20个字符,尽可能很多

以下是您希望获得重叠匹配的变体(以便class之后的0到20个字符也可以搜索class):

.{0,20}?\bclass\b(?=(.{0,20}))

请参阅this regex demo

您只需要获取匹配值并将其与第1组值(在正向前方(.{0,20})内与(?=(.{0,20}))捕获组匹配和捕获的文本部分进行连接。由于积极向前看不移动正则表达式索引,下一个匹配将能够在整个单词class之后立即开始。