Как использовать регулярное выражение для извлечения * string * из строки выражения? - PullRequest
0 голосов
/ 05 августа 2011

У меня есть строка выражения, как показано ниже (вся строка в виде строки):

String s = prefix + "abc\"abc\"abc".toUpperCase();

Я хочу извлечь "abc \" abc \ "abc" , используя регулярное выражениекоторый понимает: "двойные кавычки после обратной косой черты не являются концом строки".Как я могу это сделать?Большое спасибо!


НАКОНЕЦ

Вы, ребята, дали мне несколько советов, и, наконец, я понял это, и это мой код Java:

public class RegExpTest {

    private static final Pattern PATTERN = Pattern.compile("(([^\\\\]|^)\").*?([^\\\\]\")");

    public static void main(String[] args) {
        printStrings("He said \"Hello, \\\"\\\"\\\"\\\"name\\\"\", \"baby\"");
        printStrings("\"Go away and \\\"never\\\" come back!\" he said.");
        printStrings("\\\" outer \"inner\"");
    }

    private static void printStrings(String string) {
        System.out.println(string);
        System.out.println(extractStrings(string));
        System.out.println();
    }

    private static List<String> extractStrings(String string) {
        Matcher matcher = PATTERN.matcher(string);
        List<String> resultList = new ArrayList<String>();

        while (matcher.find()) {
            String group = matcher.group();
            if (!group.startsWith("\"")) {
                group = group.substring(1); // remove first non-double-quoter
            }
            resultList.add(group);
        }
        return resultList;
    }
}

Он выводит следующее:

He said "Hello, \"\"\"\"name\"", "baby"
["Hello, \"\"\"\"name\"", "baby"]

"Go away and \"never\" come back!" he said.
["Go away and \"never\" come back!"]

\" outer "inner"
["inner"]

Спасибо всем.

Ответы [ 3 ]

0 голосов
/ 05 августа 2011
"((?:\\"|[^"])+)"

Сначала будет соответствовать \ ", затем любая строка без кавычек. Group (1) является внутренней строкой.

0 голосов
/ 05 августа 2011

Я попытался ответить @ PaulPRO в конструкторе выражений Rad Software, но он не сработал для меня.Это сработало для вашего ввода, используя инструмент, который я упомянул выше.

\".+?(\\|\"){1}
0 голосов
/ 05 августа 2011

Вы можете использовать:

/".*?[^\]"/

Все символы после первого " до достижения следующего ", которому не предшествует \.

Примечаниечто это также не будет соответствовать "".Поскольку в кавычках должен быть хотя бы один символ для совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...