3

我是正则表达式的完整菜鸟。我一直在阅读它们,但我仍然不太了解它们,就像我什至不知道“-”符号是什么意思一样。我们可以做一个例子,并可能引导我完成它吗?我们将如何做到这一点?

一只忙碌的猫

基本上,这种语法是反向附加的字符串。

这应该匹配:

abccba
bCaaCb

这不应该匹配:

lebronnorBeL
bcAacb

非常感谢您的帮助!

4

2 回答 2

1

据我所知,RegEx 不会使用这种模式。

我的解决方法是:

private bool isMirrorLikeString(string content) {
    for (int i = 0; i < (int)(content.Length / 2); i++) {
        if (content[i] != content[content.Length - 1 - i]) return false;
    }
    return true;
}
于 2015-04-23T23:43:29.913 回答
0

从理论上讲,问题中的语言是上下文无关的,因此不能用正则表达式来描述。然而,语言和库中的正则表达式引擎引入了使其比理论上的正则表达式更强大的功能。

在这种情况下,它只是要求您检测回文字符串,只是字符串的总长度始终是偶数。

我们可以从此答案中获取正则表达式并对其进行修改:

(?<N>[01])+(?<-N>\k<N>)+(?(N)(?!))

我放弃了.?允许奇数长度回文的部分,并更改了.内部(?<N>.)以适应问题)

  • (?<N>[01])+捕获并将角色推入“堆栈” N
  • (?<-N>\k<N>)+当堆栈顶部的项目与当前字符匹配时,从“堆栈”中弹出N(注意)(这是对捕获组 N 的通常反向引用)。<-N>\k<N>
  • (?(N)(?!))检查堆栈上是否还有任何东西N,然后失败并回溯。

请注意,由于 .NET 中的平衡组功能,此正则表达式是 .NET 引擎独有的。Perl 和 PCRE 也可以匹配问题中的语言,但具有不同的功能(例程调用)。

于 2015-04-24T08:04:48.053 回答