以下正则表达式是什么?

时间:2011-08-17 04:34:03

标签: c# regex

刚刚遇到以下正则表达式:

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

我知道它说从任何东西开始它应该包含最小1个字符和最多180个字符\b代表字边界。我不明白\b在这做什么。然后(?<!\s)。这个表达是做什么的? ?<!代表后面的观察,不消耗字符串。我的猜测是它看起来背后,它不应该以空间结束。我不确定。任何人都可以清除这些疑虑。

3 个答案:

答案 0 :(得分:2)

查看表达式here on Regexr,这是测试正则表达式的有用工具。

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

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

(?<!\s)是零长度断言背后的负面看法。这意味着它检查之前(左侧)的位置是否不是空格。

因此,^.{1,10}\b(?<!\s)将匹配字符串前10个字符中的最后一个字边界,但前提是左边部分或字边界不是空格。这不仅匹配“左词边界”(我认为三重词意味着词的右侧),因为词边界不一定包括空格。

单词边界\b将匹配单词字符(由类\ w定义)和非单词字符\ W之间的空字符串。

这意味着\b(?<!\s)将匹配例如“A $”,“A”,“(A”或“.A”之间。所有这些都在两者之间有一个单词边界,左边的字符不是空格。

答案 1 :(得分:1)

在您的情况下(?<!\s)确保匹配中不包含尾随空格

通过以下方式说明很容易。在您的示例中将180更改为10,因此您不需要非常长的测试字符串:

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

现在尝试将以下字符串与其匹配(注意两个和三个之间的两个空格):

one two  three four

您的正则表达式匹配不包括两个和三个之间的两个空格。但是,如果您删除正则表达式的最后一部分,如下所示:

^.{1,10}\b

然后两个之后的两个空格将包含在匹配中。

答案 2 :(得分:0)

基本上,“not whitespace”断言强制\ b仅匹配左侧字边界。换句话说,如果前180个字符在第一列之后的任何地方包含一个单词,则匹配。 (该表达式在匹配之前至少需要一个任意字符 - 很难说没有上下文,这是否真的是正确的,以及它究竟应该完成什么。)