在带有特殊字符和并发症的空格上拆分 Java 字符串
Split Java string on spaces with special characters and complications
我有一个输入字符串:
-a var1=Bat"m/an -b var2=" -a="lol " -c var3=" M^a%g-i=c "
分裂后我应该得到:
输出
- -a
- var1=Bat"m/an
- -b
- var2=" -a="lol "
- -c
- var3=" M^a%g-i=c "
规则:
- 格式类似于
-(char)(atleast one space)variable=value
- 值可以包含除空格以外的任何特殊字符,例如。
Bat"m/an
- 如果在引号 ex 中,值可以有空格。
" -a="lol "
或 " M^a%g-i=c "
我写了正则表达式,但引号内的引号搞砸了:
(?:"[^"]*"|\S)+
我也尝试在 ="
上明智地解析字符或拆分,但我面临歧义,因为它们也可以在引号内。
您可以将此正则表达式用于 匹配 和先行断言:
-?[a-z_]\w*(?:=".*?"(?=\h+(?:-[a-z](?=\h|$)|[a-z]\w*=)|$)|\S+)?
正则表达式解释:
-?
:以可选的连字符开头
[a-z_]\w*
:匹配以小写字母或下划线开头后跟0+字字符的变量
(?:
: 启动非捕获组
".*?"(?=...<expression>)
:匹配以双引号开头和结尾的带引号的字符串。使用前瞻,我们断言我们有另一个变量或前面的行尾。
|
: 或
\S+
:匹配1+个非空白字符
)
:结束非捕获组
您可以尝试以下操作:
(-[a-z]|[^\s][^\s]*="?[^"]*"?[^\s]*)
所有参数及其值将作为单独的组捕获
解释:
Capturing Group (-[a-z]|[^\s][^\s]*="?[^"]*"?[^\s]*)
1st Alternative -[a-z]
2nd Alternative [^\s][^\s]*="?[^"]*"?[^\s]*
[^\s] - A character which should not be a space
[^\s]* - Matches all non space characters
= checks for equal to as mandatory
= matches the character = literally (case sensitive)
"? checks if " symbol is there
[^"]* checks for all symbols that are not as "
"? Again check for " as option
[^\s]* Finally again check for all non space characters
希望对您有所帮助 :) .
我有一个输入字符串:
-a var1=Bat"m/an -b var2=" -a="lol " -c var3=" M^a%g-i=c "
分裂后我应该得到:
输出
- -a
- var1=Bat"m/an
- -b
- var2=" -a="lol "
- -c
- var3=" M^a%g-i=c "
规则:
- 格式类似于
-(char)(atleast one space)variable=value
- 值可以包含除空格以外的任何特殊字符,例如。
Bat"m/an
- 如果在引号 ex 中,值可以有空格。
" -a="lol "
或" M^a%g-i=c "
我写了正则表达式,但引号内的引号搞砸了:
(?:"[^"]*"|\S)+
我也尝试在 ="
上明智地解析字符或拆分,但我面临歧义,因为它们也可以在引号内。
您可以将此正则表达式用于 匹配 和先行断言:
-?[a-z_]\w*(?:=".*?"(?=\h+(?:-[a-z](?=\h|$)|[a-z]\w*=)|$)|\S+)?
正则表达式解释:
-?
:以可选的连字符开头[a-z_]\w*
:匹配以小写字母或下划线开头后跟0+字字符的变量(?:
: 启动非捕获组".*?"(?=...<expression>)
:匹配以双引号开头和结尾的带引号的字符串。使用前瞻,我们断言我们有另一个变量或前面的行尾。|
: 或\S+
:匹配1+个非空白字符
)
:结束非捕获组
您可以尝试以下操作:
(-[a-z]|[^\s][^\s]*="?[^"]*"?[^\s]*)
所有参数及其值将作为单独的组捕获
解释:
Capturing Group (-[a-z]|[^\s][^\s]*="?[^"]*"?[^\s]*)
1st Alternative -[a-z]
2nd Alternative [^\s][^\s]*="?[^"]*"?[^\s]*
[^\s] - A character which should not be a space
[^\s]* - Matches all non space characters
= checks for equal to as mandatory
= matches the character = literally (case sensitive)
"? checks if " symbol is there
[^"]* checks for all symbols that are not as "
"? Again check for " as option
[^\s]* Finally again check for all non space characters
希望对您有所帮助 :) .