我试图理解正则表达式语言,但它很难。
我已经阅读了一些教程,但我并没有真正理解它。
我有这个正则表达式,
N\b*:\b*[^:]*
有人可以告诉我这个正则表达意味着什么吗?
非常感谢!
答案 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*[^:]*
哪里
N
,:
是文字\b
表示单词start / end 提示:在熟悉基础知识之后,我会说:
让我们玩游戏:
将左手手指放在黑点上,右手指放在要匹配的弦的第一个字符上,并尝试用左手指到达白点。
规则是:
答案 2 :(得分:0)
某些上下文可能对一般的函数的更具体的描述有用,但是打破这个特定的正则表达式:
N
- 字母'N'。
\b*
- 零个或多个单词边界(也就是说,它匹配单词的结尾。)
:
- 冒号
\b*
- 再次出现零个或多个字边界
[^:]*
- 一系列字符,直到行尾或者
a:已到达。
在字符串
中LMN: Testing:123
这将匹配
N: Testing