正则表达式的含义

时间:2013-07-10 09:30:51

标签: regex

我试图理解正则表达式语言,但它很难。

我已经阅读了一些教程,但我并没有真正理解它。

我有这个正则表达式,

N\b*:\b*[^:]*

有人可以告诉我这个正则表达意味着什么吗?

非常感谢!

3 个答案:

答案 0 :(得分:2)

将正则表达式分解为我们的组件:

  • N
  • \b*
  • :
  • \b*
  • [^:]*

N:只是文字。没什么好说的。

\b是边界伪类。它将匹配字符串的开头,结尾或字边界。单词边界是单词的开头或结尾。这有点奇怪,因为它匹配(“消耗”)没有字符。在字符串“foo bar”中有4个字边界(在f之前,在o之后,在b之前,在r之后)。

*表示前一个匹配可以重复任意次数(0,1,2或更多)。这意味着您接受任意数量的连续字边界。

最后括号[ ]定义了一个类。在这堂课里面有^:^表示“反向”。例如,如果您有一个类[a],它将匹配字符a。但是[^a]会匹配除a之外的所有内容。因此,课程[^:]将匹配除:之外的所有内容。最后我们再次*意味着您可以多次匹配此类。

因此,将所有内容放在一起就是正则表达式的含义:

  • 匹配字母N
  • 匹配任意数量的字边界
  • 匹配字符:
  • 匹配任意数量的字边界
  • 匹配除:以外的任意数量的字符。

以下是一些例子:

  • N: - 匹配,这是最简单的匹配
  • N - 不匹配,没有:
  • N:foobar - 匹配
  • N:foobar:baz - 不匹配,不允许第二个:

这整个词边界业务不是很直观,没有上下文就不清楚这里的意思。匹配:周围的单词边界没有多大意义。但至少你应该能够更好地理解正则表达式。

答案 1 :(得分:1)

我建议您使用debuggex.com

N\b*:\b*[^:]*

Regular expression image

哪里

  • N:是文字
  • \b表示单词start / end

Edit live on Debuggex

提示:在熟悉基础知识之后,我会说:

让我们玩游戏:

将左手手指放在黑点上,右手指放在要匹配的弦的第一个字符上,并尝试用左手指到达白点。

规则是:

  • 如果您当前与之匹配的字符
  • ,则只能通过矩形
  • 一旦你通过一个矩形,你必须用一个角色推进你的右手手指
  • 你不被允许倒退(双手)
    • 例外是循环(连接黑色和白色点的线下方的循环)
  • 如果你到达白点你有匹配

答案 2 :(得分:0)

某些上下文可能对一般的函数的更具体的描述有用,但是打破这个特定的正则表达式:

N - 字母'N'。
\b* - 零个或多个单词边界(也就是说,它匹配单词的结尾。)
: - 冒号 \b* - 再次出现零个或多个字边界 [^:]* - 一系列字符,直到行尾或者 a:已到达。

在字符串

LMN:  Testing:123

这将匹配

N:  Testing