gpt4 book ai didi

java - 拆分 Java 字符串

转载 作者:搜寻专家 更新时间:2023-11-01 02:25:32 24 4
gpt4 key购买 nike

我在使用 Java 正则表达式时遇到了一些麻烦。我有这样一个字符串

a + 4 * log(3/abs(1 – x)) + sen(-b/4 + PI)

我需要将其拆分为以下标记:

{"a", "+", "4", "*", "log", "(3/abs(1 - x))", "+", "sen", "(-b/4 + PI)"}

有什么想法吗?

我试过这个 PHP 正则表达式,但由于某些原因它不能在 Java 上运行

[a-z]+(\((?>[^()]+|(?1))*\))|[a-z]+|\d+|\/|\-|\*|\+

最佳答案

全部匹配与拆分

匹配和拆分是一枚硬币的两个面。这非常棘手,因为 Java 不支持递归并且我们有一些嵌套的括号。但这应该可以解决问题:

Java

\(.*?\)(?![^(]*\))|[^\s(]+

参见 demo .

遍历所有匹配项:

Pattern regex = Pattern.compile("\\(.*?\\)(?![^(]*\\))|[^\\s(]+");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
// the match: regexMatcher.group()
}

解释

  • \(.*?\)(?![^(]*\)) 匹配左括号和右括号之前的所有内容,后跟一个左括号和更多右括号标准杆。这适用于表达式中的 (simple(nesting)),但不适用于 (this(kind)of(nesting))(请参阅 PHP 解决方案)<
  • | 或者...
  • [^\s(]+ 任何不是空格或开头的字符

带递归的 PHP 选项

在 PHP 中,我们可以使用递归来更精确地匹配嵌套结构(这将克服 Java 中 (this(kind)of(nesting)) 的问题:

(\((?:[^()]++|(?1))*\))|[^\s(]+

关于java - 拆分 Java 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541956/

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