忽略转义字符时拆分字符串

泰勒·森特

我想沿着空格分割一个字符串,忽略空格(如果它们包含在单引号中),以及忽略单引号(如果它们被转义)(即\'),下面是另一个问题的补充

    String s = "Some message I want to split 'but keeping this a\'s a single string' Voila!";
    for (String a : s.split(" (?=([^\']*\'[^\"]*\')*[^\']*$)")) {
        System.out.println(a);
    }

上面代码的输出是

Some
message
I
want
to
split
'but
keeping
this
'a's a single string'
Voila!

但是,如果需要将单引号转义(\'),则需要忽略这些单引号,而上述情况不会这样做。此外,当且仅当(正斜杠)转义单引号(到'this is a \'string'变为this is a 'string)时,我才需要删除第一个和最后一个单引号和正斜杠我不知道如何使用正则表达式。我将如何完成?

阿努巴瓦

您需要在后面使用负数来处理转义的单引号:

String str = 
        "Some message I want to split 'but keeping this a\\'s a single string' Voila!";

String[] toks = str.split( " +(?=((.*?(?<!\\\\)'){2})*[^']*$)" );
for (String tok: toks)
    System.out.printf("<%s>%n", tok);

输出:

<Some>
<message>
<I>
<want>
<to>
<split>
<'but keeping this a\'s a single string'>
<Voila!>

PS:正如你指出的是,逃过单引号需求为要输入\\'String分配,否则它将作为普通对待'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章