正则表达式 - 没有" p"在第二位置

时间:2015-04-15 17:28:45

标签: regex

我正在学习正则表达式,在阅读this post之后,我开始做一些练习,我被困在exercise上。以下是应该匹配且不匹配的两个单词列表

enter image description here

我从

开始
^(.).*\1$

并且被sporous打扰但是不应该匹配。所以我找到了

^(.)(?!p).*\1$

这就是诀窍。

给定here的最佳解决方案(比我的解决方案少一个字符)是

^(.)[^p].*\1$

但我真的不明白这种模式。实际上我觉得我对在^组中看到[]锚点感到困惑,我对在其他地方看到^锚点而不是在正则表达式的开头感到困惑。

你能帮助理解这个正则表达式在做什么吗?

5 个答案:

答案 0 :(得分:2)

方括号中的任何内容都是一个字符类。此上下文使用自己的迷你语法,通过添加插入符号作为字符类{{1}中的第一个字符,仅列出允许的字符[abc]或一系列允许的字符[a-z]或不允许的字符}。

答案 1 :(得分:1)

[^p]只是意味着任何字符都匹配,而不是p

我将在以下句子中逐步解释正则表达式。

^        start of the string
(.)      matches any character as group 1
[^p]     matches any character that is not p
 .*      matches any character that repeats zero or more times
 \1      matches the exact matched character(s) from group 1
 $       end of the string

学习正则表达式的一个很好的来源是regex101

答案 2 :(得分:1)

您的解决方案使用不消耗字符的否定前瞻(?!p),只检查下一个字符是否不是p

另一个解决方案使用否定字符类[^p],它将使用p以外的字符。

因此,最终解决方案取决于您需要匹配/捕获的内容。

答案 3 :(得分:1)

以下是^(.)[^p].*\1$

的模式说明
^     start of the string/line
(.)   group first character
[^p]  any character except p
.*    zero or more characters
\1    first matched group again
$     end of the string/line

上述正则表达式匹配任何以相同字符开头和结尾的字符串,并且在第二个位置不包含p。

有关详细说明,请访问regex101

详细了解Negated Character Classes

答案 4 :(得分:1)

^表示在行的开头断言位置,但是,在字符类[ ]中,它等于匹配除...之外的字符

示例:

^test-[^p]-1234

<强>结果:

test-q-1234 // match
test-p-1234 // no match
test-o-1234 // match

https://regex101.com/r/wN4zF9/1