相关疑难解决方法(0)

为什么{a ^ nb ^ n | n> = 0}不规律?

在我接受的CS课程中,有一个不常规的语言示例:

{a^nb^n | n >= 0}
Run Code Online (Sandbox Code Playgroud)

我可以理解它不常规,因为没有有限状态自动机/机器可以编写验证和接受此输入,因为它缺少一个内存组件.(如果我错了,请纠正我)

关于常规语言维基百科条目也列出了这个例子,但没有提供(数学)证明为什么它不常规.

任何人都可以启发我并为此提供证据,或者指出我太好的资源?

computer-science fsm regular-language

14
推荐指数
3
解决办法
3万
查看次数

使用像perl这样的递归正则表达式匹配Ruby中的平衡括号

我一直在寻找一种方法来匹配正则表达式中的平衡括号,并在Perl中找到了一种使用递归正则表达式的方法:

my $re;
$re = qr{
           \(
              (?:
                 (?> [^()]+ )       # Non-parens without backtracking
                 |
                 (??{ $re })        # Group with matching parens
              )*
           \)
         }x;
Run Code Online (Sandbox Code Playgroud)

来自perl正则表达式网站 .

有没有办法在Ruby或类似语言中执行此操作?

更新:

对于那里感兴趣的人有一些有趣的链接:

Oniguruma手册 - 来自Sawa的回答.

实用程序员的Ruby 1.9正则表达式示例章节

ruby regex perl

13
推荐指数
1
解决办法
9186
查看次数

在python中使用嵌套子括号删除双曲线括号之间的数据

我对这个问题有些困难.我需要删除包含在波浪括号中的所有数据.

像这样:

Hello {{world of the {{ crazy}} {{need {{ be}}}} sea }} there.
Run Code Online (Sandbox Code Playgroud)

变为:

Hello there.
Run Code Online (Sandbox Code Playgroud)

这是我的第一次尝试(我知道这很糟糕):

while 1:
    firstStartBracket = text.find('{{')
    if (firstStartBracket == -1):
        break;
    firstEndBracket = text.find('}}')
    if (firstEndBracket == -1):
        break;
    secondStartBracket = text.find('{{',firstStartBracket+2);
    lastEndBracket = firstEndBracket;
    if (secondStartBracket == -1 or secondStartBracket > firstEndBracket):
        text = text[:firstStartBracket] + text[lastEndBracket+2:];
        continue;
    innerBrackets = 2;
    position = secondStartBracket;
    while innerBrackets:
        print innerBrackets;
        #everytime we find a next start bracket before the ending add 1 to inner …
Run Code Online (Sandbox Code Playgroud)

python regex parsing

13
推荐指数
1
解决办法
599
查看次数

圆括号({} []()<>)问题

我希望能够将所有括号配对成一个字符串,如果它们没有配对,那么它们会得到它们的索引号和False.似乎它一遍又一遍地重复一些值,即cl == pop [1].我试图看看问题出在哪里,但无论我怎么努力,我都看不到它.所以我问是否有人帮助我找到错误,甚至可能改进我的代码;)

def check_parentheses(string):
    pending = 0
    brackets = []
    '''Checks if parens are paired, otherwise they are bad.'''
    parenstack = collections.deque()
    for ch in string:
        if ch in lrmap:
            try:
                cl = string.index(ch, pending)
                pending = cl + 1

            except:
                cl = False

        if ch in lparens:
            parenstack.append([ch, cl])
            print parenstack

        elif ch in rparens:
            try:
                pop = parenstack.pop()

                if lrmap[pop[0]] != ch:
                    print 'wrong type of parenthesis popped from stack',\
                    pop[0], ch, pop[1], cl

                    brackets.append([pop[1], False]) …
Run Code Online (Sandbox Code Playgroud)

python syntax-checking parentheses

10
推荐指数
2
解决办法
3万
查看次数

正则表达式匹配括号

对于模板引擎,我使用正则表达式来标识字符串中括号内的内容.例如,正则表达式需要匹配{key}或<tag>或[element].

目前我的正则表达式如下所示:

var rx=/([\[\{<])([\s\S]+?)([\]\}>])]/;
Run Code Online (Sandbox Code Playgroud)

问题是这样的正则表达式不会强制括号匹配.例如,在以下字符串中:

[{lastName},{firstName}]
Run Code Online (Sandbox Code Playgroud)

正则表达式将匹配 [{lastName}

有没有办法定义匹配括号?例如,如果开口括号是[那么结束括号必须是],而不是}或a>

javascript regex

10
推荐指数
1
解决办法
4万
查看次数

正则表达式替换文本但在文本位于特定标记之间时排除

我有以下字符串:

Lorem ipsum Test dolor sit amet, consetetur sadipscing elitr, sed diam nonumy <a href="http://Test.com/url">Test</a> eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd sed Test dolores et ea rebum. Stet clita kasd gubergren, no sea <a href="http://url.com">Test xyz</a> takimata sanctus est Lorem ipsum dolor sit amet.
Run Code Online (Sandbox Code Playgroud)

现在我将标签之外的字符串'Test'替换为不在标签之间(例如替换为'1234').

Lorem ipsum 1234 dolor sit amet, consetetur sadipscing elitr, sed diam nonumy <a …
Run Code Online (Sandbox Code Playgroud)

regex

10
推荐指数
3
解决办法
2万
查看次数

正则表达式{{匹配

我需要匹配以下整个语句:

{{CalendarCustom|year={{{year|{{#time:Y}}}}}|month=08|float=right}}
Run Code Online (Sandbox Code Playgroud)

基本上每当有原始标签内部{需要有相应数量的}嵌入时{ }.所以例如{{match}}或者{{ma{{tch}}}}{{m{{a{{t}}c}}h}}.

我现在有这个:

(\{\{.+?(:?\}\}[^\{]+?\}\}))
Run Code Online (Sandbox Code Playgroud)

这不太奏效.

c# regex

7
推荐指数
1
解决办法
918
查看次数

如何使用正则表达式匹配方法块?

举个例子。

 public static FieldsConfig getFieldsConfig(){
    if(xxx) {
      sssss;
    }
   return;
}
Run Code Online (Sandbox Code Playgroud)

我写了一个正则表达式,"\\s*public\\s*static.*getFieldsConfig\\(.*\\)\\s*\\{"

它只能匹配第一行。但是如何正确匹配方法的最后一个“}”呢?

帮我。谢谢。

编辑:未指定方法{}的内容。但图案肯定是这样的,

  public static xxx theKnownMethodName(xxxx) {
    xxxxxxx
  }
Run Code Online (Sandbox Code Playgroud)

java regex

6
推荐指数
1
解决办法
5582
查看次数

用于括号内文本的Ruby正则表达式

我正在寻找一个正则表达式来替换括号中的所有项,除非括号在方括号内.

例如

(matches) #match
[(do not match)] #should not match
[[does (not match)]] #should not match
Run Code Online (Sandbox Code Playgroud)

我目前有:

[^\]]\([^()]*\) #Not a square bracket, an opening bracket, any non-bracket character and a closing bracket.
Run Code Online (Sandbox Code Playgroud)

但是,这仍然是方括号内的匹配单词.

到目前为止,我还创建了一个我的进度的rubular页面:http://rubular.com/r/gG22pFk2Ld

ruby regex

5
推荐指数
1
解决办法
3098
查看次数

忽略正则表达式匹配的 N 个嵌套括号内的逗号

这是我之前问题的直接后续,我得到了以下正则表达式;

const matches = text.match(/(?:\([^()]*(?:\([^()]*\)[^()]*)*\)|[^,])+/g);
Run Code Online (Sandbox Code Playgroud)

由此a,(b, b),c (aaa, (bbb, cccc, ddd)),d我得到

a
(b, b)
c (aaa, (bbb, cccc, ddd))
d
Run Code Online (Sandbox Code Playgroud)

但当我遇到以下情况时,它会失败a,(b, b),c (aaa, ((b b), cccc, ddd)),d,其中有 3 个嵌套括号,在剖析正则表达式如何工作后这是合乎逻辑的。

我尝试更新它以考虑另一级括号,我做了以下操作

a
(b, b)
c (aaa, (bbb, cccc, ddd))
d
Run Code Online (Sandbox Code Playgroud)

它有效(在线演示),但我不确定这是否是最佳解决方案。我也不知道它是否会涵盖所有情况。有人能证实吗?或者也许有更好的正则表达式。

我也在寻找一种方法来为给定数量的括号生成此类正则表达式。我有 2 和 3,但是 N 呢?如果我总是递归地重复以下部分,它会起作用吗(?:\([^()]*\)[^()]*)*?我知道正则表达式无法处理任意数量的嵌套括号,但我并不是在寻找这个。我想要一个给定的数字来生成正则表达式(使用 JS)并使用它。

javascript regex

5
推荐指数
1
解决办法
172
查看次数