我想沿空格分割一个字符串,如果它们包含在单引号内则忽略空格,如果它们被转义则忽略单引号(即,\') 我从another question完成了以下内容。
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
)。我不知道如何使用正则表达式。我该如何做到这一点?
答案 0 :(得分:3)
您需要使用负面反对来处理转义的单引号:
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
,否则会被视为普通'
答案 1 :(得分:1)
答案 2 :(得分:1)
我真的过度思考这个。
这应该可行,最好的部分是它根本不使用外观(因此它几乎可以在regex实现中运行,最着名的是javascript)
('[^']*?(?:\\'[^']*?)*'|[^\s]+)
不使用拆分,而是使用匹配来使用此正则表达式构建数组。
我的目标是
测试字符串:辨别单引号的双重用途&#39;作为&#39;引用标记&#39;,比如&#34;,以及&#39; cotraction的标记。&#39;。
如果你问作者并且他是以第三人的身份发言,他会说'CFQueryParam'的例子是人为的,他知道但是他有世界的理由。最困难的时候想一个例子。&#39;
我希望分割一些消息,但要保持一个字符串&#39;瞧!
结果: Discerning
, between
, 'the single quote\'s double purpose'
, as
, a
, 'quote marker'
, ,
,< strong> like
, ",
, and
, a
, 'a cotraction\'s marker.'
, .
,
If
, you
, asked
, the
, author
, and
, he
, {{1 , was
, speaking
, in
, { {1}} , the
, third
, person,
, he
, would
,
say
, 'CFQueryParam\'s example is contrived, and he knew that but he had the world\'s most difficult time thinking up an example.'
, Some
, message
, I
, want
, to
, {{1 }} 强>