如何使用正则表达式删除字符串?

时间:2015-06-16 10:17:26

标签: java regex

我很抱歉标题不清楚,但我不知道如何打电话。 通过简单的样本更容易展示。

我在文本文件中有以下几行(实际上是PHP代码)

'config' => array
(
    'dataContainer' =>  'Table',
    'enableVersioning'  =>  true,
),
'list' => array
(
    'sorting' => array
    (
        'mode'  =>  0,
        'flag'  =>  0,
        'panelLayout'   =>  'filter;sort,search,limit',
        'fields' => array
        (
            'id',
            'guid',
            'name',
        ),
    ),
)

我想替换','这些数组的最后一行,以纠正输出。像这样:

'config' => array
(
    'dataContainer' =>  'Table',
    'enableVersioning'  =>  true
),
'list' => array
(
    'sorting' => array
    (
        'mode'  =>  0,
        'flag'  =>  0,
        'panelLayout'   =>  'filter;sort,search,limit',
        'fields' => array
        (
            'id',
            'guid',
            'name'
        )
    )
)

所以我试着抓住这些字符串:

String regex = ",\n[^\\t]*[)]";
code = code.replaceAll(",\n[^\\t]*[)]", "\n");

这是一个逗号后跟换行符,一个包含任意数量的制表符和一个封闭圆括号的linestart。

这应该换成换行符,任意数量的制表符和封闭的圆括号

毕竟,只有逗号才会被删除。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

您可以使用它并替换为empty string

code = code.replaceAll(",(?=\\s*\\))", "")

答案 1 :(得分:2)

,(\\s*\\))替换为$1。这里$1表示正则表达式捕获的第一个组(即\\s*\\),多个空格后跟))。

答案 2 :(得分:1)

一个好的替代品将是:

String corrected = input.replaceAll(",(\\s*\\))", "$1" );
  • 逗号字符与逗号
  • 匹配
  • \ s *与包括新行字符在内的所有空格匹配
  • ()进行分组:它命名所有空格,您可以在替换中使用$ 1
  • \)与括号匹配。你必须把\)避免使用,这是正则表达式的特殊字符

答案 3 :(得分:0)

    code = code.replaceAll(",\\s+\\)", "\n)");