0

服务器向我发送一些代表某些形状的字符串。

<RECTANGLE> 157 20 225 99 </RECTANGLE>
<CIRCLE> 282 301 7 </CIRCLE>

让我们以矩形为例。

<RECTANGLE> 157 20 225 99 </RECTANGLE>

现在,当我执行我的正则表达式时,我需要获取这些组:

myArray[0] = "<RECTANGLE> 157 20 225 99 </RECTANGLE>"
myArray[1] = "RECTANGLE"
myArray[2] = " 157 "
myArray[3] = " 20 "
myArray[4] = " 225 "
myArray[5] = " 99 "

但是使用我当前的正则表达式:

<(.*?)>( \S+ )+</\1>

它返回给我:

null

如果我使用这个输入:

<SQUARE> 55465 </SQUARE>

我只得到:

myArray[0] = "<SQUARE> 55465 </SQUARE>"
myArray[1] = "SQUARE"
myArray[2] = " 55465 "

所以它只在字符串中只有一个(空白)数字(空白)时才有效。

有人可以帮助纠正我的正则表达式,以便它得到字符串中的所有(空白)数字(空白)。

4

2 回答 2

0

空间是\040 我推荐你使用explode/split/etc,因为在这个例子中它比正则表达式更好

于 2013-09-11T20:13:19.100 回答
0

您不能将可变数量的元素捕获到捕获组中,因为它们会相互覆盖。

Not working: <(.*?)>\s*(?:(\d+)\s*)*</\1>

第二个捕获组(\d+)将一个数字捕获到 \2 中,但是外部组重复匹配将用后续数字覆盖 \2,因此最后 \2 将包含最后一个匹配的数字。

您必须分两步执行此操作。首先提取整个数字集,然后从中分别提取数字。

Intermediate step: <(.*?)>\s*(\d+\s*)*</\1>

这将得到类似“157 20 225 99”的内容到 \2 中,然后您可以将其拆分为空格以获取各个数字。

于 2013-09-12T08:35:05.407 回答