gpt4 book ai didi

java - 正则表达式在 Java 中得到错误的输出

转载 作者:行者123 更新时间:2023-12-01 19:06:16 24 4
gpt4 key购买 nike

我有一个看起来像这样的字符串:

" 'a 'b '(d f g (1 2)) '(3 4) (a d) d "

我想做的是匹配,所以我得到这个输出:

'a, 'b, '(d f g (1 2)), '(3 4), (a d), d

我目前正在使用:

"'\(.*\)|\(\.*\)|'\w+|\w+"

但是我在使用这个时遇到了一个问题,例如,如果我写

'(a b c) (d f)

它会返回

'(a b c) (d f)

而不是

'(a b c), (d f)

所以我的问题是是否有办法用正则表达式解决这个问题,或者我是否必须以其他方式解决这个问题?

最佳答案

答案是否定的。

您尝试解析的语言不是常规,它是上下文无关。所以你无法用正则表达式解析它。

如果您有兴趣,这里是语法:

 S->SS|e;
S->'(A);
A-> AA|(A)|w+;

它不是常规的,因为您无法构建 FSM 来表示它,这是事实,以防您可以递归地包含括号结构。

好吧,无论如何。让我们回答“如何?”的问题。从第一个字符开始遍历字符串。一旦找到连字符,就开始计算括号。开盘计数为+1,收盘计数为-1。一旦您击中结果计数器为零的右括号,请在该括号后插入一个逗号。问题已解决:

 'a 'b '(d f g (1 2)) '(3 4) (a d) d
| | ||
| | |+-- counter = 0 on closing bracket, insert comma
| | +--- counter = 1
| +------- counter = 2
+-------------- start counting, counter = 1

等等

关于java - 正则表达式在 Java 中得到错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9968733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com