0

我有一个格式的输入字符串abc;def;ghi;jkl;........等等。允许的最小输入字符串是abc,而最大令牌数没有限制。此外,每个令牌的长度不固定为 3。它可以是任意数量的字符。

例如,america;russia;uae也是一个可接受的输入

我想取出前三个标记并从中制作单独的属性。如果少于 3 个,那么这些相应的标记应该是NULL.

到目前为止,我已经尝试了很多正则表达式(我不习惯)

${testprop}包含输入字符串。

我正在使用以下命令

propertyregex property="testprop1" input="${testprop}" regexp="(.*)(\;.*)*/" select="\1"

但它不工作。任何关于更好正则表达式的建议!

4

2 回答 2

0

使用此正则表达式来减少获取前 3 个字符(如果存在)。

/(?i)\b([\w]{3}(?=[\w]*;))/

在这里验证

使用此正则表达式获取值小于 3 个字符的字符串。

/(?i)\b([\w]{1,2}(?=;))/

在这里验证

于 2012-12-28T06:51:26.233 回答
0

谢谢大家。我终于想出了答案。

使用以下正则表达式,
([^;]+)([;]?[^;]*)([;]?)([;]?[^;]*)([;]?)

1我们可以分别得到 groups和2中的前 3 个字符串标记4。但是该组2带有一个前置;,可以通过应用\;(.*)和提取来进一步删除 group 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

于 2012-12-31T04:28:22.037 回答