我有一个格式为abc;def;ghi;jkl;........
的输入字符串,依此类推。允许的最小输入字符串为abc
,而最大令牌数没有限制。此外,每个令牌的长度不固定为3.它可以是任意数量的字符。
例如,america;russia;uae
也是可接受的输入
我想取出前三个令牌并从中制作单独的属性。如果小于3,则相应的令牌应为NULL
。
到目前为止,我已经尝试了很多正则表达式(我不习惯)
${testprop}
包含输入字符串。
我正在使用以下命令
propertyregex property="testprop1" input="${testprop}" regexp="(.*)(\;.*)*/" select="\1"
但它不起作用。有关更好的正则表达式的任何建议!!
答案 0 :(得分:0)
使用此正则表达式减少前3个字符(如果存在)。
/(?i)\b([\w]{3}(?=[\w]*;))/
使用此正则表达式获取值小于3个字符的字符串。
/(?i)\b([\w]{1,2}(?=;))/
答案 1 :(得分:0)
谢谢大家。我终于找到了答案。
使用以下正则表达式,
([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)
我们可以分别获得小组1
,2
和4
中的前3个字符串令牌。但是小组2
带有前面的;
,可以通过应用\;(.*)
并提取小组1
来进一步删除。
property name="inputString" value="russia;uae;germany;africa;"
propertyregex property="string1" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\1"
propertyregex property="string2" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\2"
propertyregex property="string3" input="${string2}" regexp="\;(.*)" select="\1"
propertyregex property="string4" input="${inputString}" regexp="([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)" select="\4"
这为您提供了string1,string3和string4
中所需的前三个标记 string1 = russia
string3 = uae
string4 = germany