下面这个正则表达式是什么意思?

本文关键字:是什么 意思 正则表达式 | 更新日期: 2023-09-27 18:05:43

刚刚遇到了下面这个正则表达式:

Regex.Match(feed.Element("description").Value, @"^.{1,180}'b(?<!'s)").Value

我知道它说从任何东西开始它应该包含最少1和最多180个字符'b代表单词边界。我不明白'b在这里做什么。然后是(?<!'s)。这个表达在做什么??<!代表向后看,不消耗字符串。我猜它说的是向后看,它不应该以太空结束。但我不确定。谁能澄清这些疑问?

下面这个正则表达式是什么意思?

在Regexr上查看您的表达式,这是一个测试正则表达式的有用工具。

为了测试,我将最大长度减少到10。所以它看起来像

^.{1,10}'b(?<!'s)

(?<!'s)是对零长度断言的否定。这意味着它会检查前面(左边)的位置是否为空白。

因此,^.{1,10}'b(?<!'s)将在字符串的前10个字符的最后一个单词边界处匹配,但前提是左侧部分或单词边界不是空白。这不仅将匹配"左词边界"(我认为tripleee是指单词的右侧),因为单词边界不一定包括空白。

一个词边界'b将匹配一个词字符(由类'w定义)和一个非词字符'w之间的空字符串

这意味着'b(?<!'s)将匹配例如"A$","A","(A)"或"A"。它们之间都有一个词边界,并且左边的字符不是空白。

在您的示例中,(?<!'s)确保在匹配

中不包含尾随空格

用下面的方法来说明很容易。在示例中将180改为10,这样就不需要很长的测试字符串了:

^.{1,10}'b(?<!'s)

现在尝试匹配下面的字符串(注意2和3之间有两个空格):

one two  three four

正则表达式匹配将不包括2和3之间的两个空格。但是,如果像这样删除正则表达式的最后一部分:

^.{1,10}'b

则两个后面的两个空格将包含在匹配中

基本上,"非空白"断言强制'b只匹配左单词边界。因此,换句话说,如果前180个字符包含在第一列之后的任何位置开始的单词,则此匹配。(表达式在匹配之前至少需要一个任意字符——如果没有上下文,很难说这是否真的正确,以及它到底应该完成什么。)