Regex удаляет все, что находится снаружи {} - PullRequest
2 голосов
/ 20 мая 2010

регулярное выражение для удаления всего, что находится за пределами {} например:

перед: |loader|1|2|3|4|5|6|7|8|9|{"data" : "some data" }

после того, как: {"data" : "some data" }

с регулярным выражением @ Marcelo, это работает, но не в том случае, если внутри {} есть другие {}, как здесь:

"|loader|1|2|3|4|5|6|7|8|9|
   {'data':  
       [ 
         {'data':'some data'}
       ],  
   }"

Ответы [ 5 ]

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

Для тех, кто ищет этот PHP, у меня работает только этот:

preg_replace("/.*({.*}).*/","$1",$input);
0 голосов
/ 20 мая 2010

в JavaScript вы можете попробовать

s = '|loader|1|2|3|4|5|6|7|8|9|{"data" : "some data" }';
s = s.replace(/[^{]*({[^}]*})/g,'$1');
alert(s);

Конечно, это не будет работать, если «некоторые данные» имеют фигурные скобки, поэтому решение сильно зависит от ваших входных данных.

Я надеюсь, что это поможет вам

Джером Вагнер

0 голосов
/ 20 мая 2010

Вы хотите сделать:

Regex.Replace("|loader|1|2|3|4|5|6|7|8|9|{\"data\" : \"some data\" }", ".*?({.*?}).*?", "$1");

(синтаксис C #, регулярное выражение должно быть хорошо в большинстве языков afaik)

0 голосов
/ 20 мая 2010

Вы можете сделать что-то подобное в Java:

    String[] tests = {
        "{ in in in } out",                 // "{ in in in }"
        "out { in in in }",                 // "{ in in in }"
        "   { in }   ",                     // "{ in }"
        "pre { in1 } between { in2 } post", // "{ in1 }{ in2 }"
    };
    for (String test : tests) {
        System.out.println(test.replaceAll("(?<=^|\\})[^{]+", ""));
    }

Регулярное выражение:

(?<=^|\})[^{]+

В основном мы сопоставляем любую строку, которая находится "снаружи", как определено как что-то, что следует за литералом }, или начиная с начала строки ^, пока не достигнет литерала {, то есть мы сопоставим [^{]+, мы заменим эту совпавшую "внешнюю" строку пустой строкой.

Смотри также


Решение Javascript без регулярных выражений, для нестабильного, но единственного верхнего уровня {...}

В зависимости от спецификации проблемы (это не совсем понятно), вы также можете сделать что-то вроде этого:

var s = "pre { { { } } } post";
s = s.substring(s.indexOf("{"), s.lastIndexOf("}") + 1);

Это именно то, что написано: для произвольной строки s она берет свою подстроку, начиная с первой { до последней } (включительно).

0 голосов
/ 20 мая 2010

Это похоже на работу - Какой язык вы используете - Очевидно, Regex ... но на какой стороне сервера - тогда я могу выразить это для вас

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