Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式进行字符串解析_Java_Regex_Parsing_String - Fatal编程技术网

Java 使用正则表达式进行字符串解析

Java 使用正则表达式进行字符串解析,java,regex,parsing,string,Java,Regex,Parsing,String,我有一个要解析为列表或字符串[]的字符串 (Test)(Testing (Value)) 最终结果应该是Test和Testing(Value)如果我正确理解您需要Test和Testing(Value),那么这里是regexp: \(([^\)]+)\)\((.+)\) 以及它的屏蔽版本ready for java string: \\(([^\\)]+)\\)\\((.+)\\) 请阅读php手册的一节。它告诉您有关可用于匹配嵌套内容的递归模式以及相关问题。谷歌搜索更多信息。这个问题确实很

我有一个要解析为列表或字符串[]的字符串

(Test)(Testing (Value))

最终结果应该是
Test
Testing(Value)

如果我正确理解您需要
Test
Testing(Value)
,那么这里是regexp:

\(([^\)]+)\)\((.+)\)
以及它的屏蔽版本ready for java string:

\\(([^\\)]+)\\)\\((.+)\\)

请阅读php手册的一节。它告诉您有关可用于匹配嵌套内容的递归模式以及相关问题。谷歌搜索更多信息。

这个问题确实很模糊,但根据一种合理的解释,这是一种解决方案,可以处理特定格式的任意嵌套深度:

    String text = "(T)(T(V))(1(2(3)2)1)(a*(b+(c-d))+(e/f))";
    String[] parts = text.split("(?<=\\))(?=\\()");
    System.out.println(java.util.Arrays.toString(parts));
    // prints "[(T), (T(V)), (1(2(3)2)1), (a*(b+(c-d))+(e/f))]"
String text=“(T)(T(V))(1(2(3)2)1)(a*(b+(c-d))+(e/f))”;

String[]parts=text.split(“(?你想问一个问题吗?你至少试过自己先解决这个问题吗?如果是的话,结果是什么?这不能用正则表达式来完成。为了确保我明白,你想去掉所有最外层的插入语,而忽略任何内部的插入语?如果是的话,我相信@SLaks是对的,这不能处理无限的插入语sting.@SLaks很好,它处理了他的确切问题,尽管
返回新字符串[]{“Test”,“Testing(Value)”};
。不清楚解决方案到底需要多大的通用性谁说过无限嵌套?如果这是你的意思,这个将
Testing(V(a(l)u)e)
捕获到第二个捕获的组中(如果这是需要的,因为问题不清楚).Yep serg555的解决方案正是我想要的。很抱歉不清楚。谢谢!您可能想在链接的文章中加入一个概要或引用。这样我们就有了一个线索,知道为什么我们应该关注您的链接。@chilltemp:在这种情况下,这并不重要;OP是在Java中工作的,它不支持recursiv这根本不能解决这个问题。您似乎在任何涉及字符串解析和正则表达式的问题上发布了这段代码。
/**
 * Parse string:
 *              when '$' symbol is encountered it deletes it's previous character and the '$' symbol itself
 *              when '@' symbol is encountered it erases the text previous to it and the '@' symbol itself 
 * @author Rama Bolishetty
 * @date Feb 27, 2016
 */
package com.ram.utilities;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ParseString {
    private static final Pattern dollarSymborPattern = Pattern.compile("[a-zA-Z0-9]{0,1}[$]{1}");
    private static final Pattern atSymbolPattern = Pattern.compile("[a-zA-Z0-9$]{0,}[@]{1}");

    public static String parseString(String inputString) {
        String parsedString = inputString;
        Matcher m = atSymbolPattern.matcher(parsedString);
        String matcher = replaceMatcher(m);
        parsedString = matcher != null ? matcher : parsedString;
        m = dollarSymborPattern.matcher(parsedString);
        parsedString = replaceMatcher(m);
        parsedString = matcher != null ? matcher : parsedString;
        return parsedString;
    }

    private static String replaceMatcher(Matcher m) {
        if (m.find()) {
            return m.replaceAll("");
        }
        return null;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String inputString = scanner.nextLine();
        long sTime, eTime;
        System.out.println("STime:" + (sTime = System.currentTimeMillis()) + "\nParsed String:"
                + ParseString.parseString(inputString) + "ETime:" + (eTime = System.currentTimeMillis()));
        System.out.println("Total milliseconds:" + (eTime - sTime));
        scanner.close();
    }
}