服务器向我发送一些表示某些形状的字符串。
<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 "
所以只有在字符串中只有一个(空格)数字(空白)时才有效。
有人可以帮助纠正我的正则表达式,以便它获得字符串中的所有(空格)数字(空格)。
答案 0 :(得分:0)
空间为\040
我建议你使用explode / split / etc,因为它比本例中的正则表达式更好
答案 1 :(得分:0)
您无法将可变数字元素捕获到捕获组中,因为它们会相互覆盖。
Not working: <(.*?)>\s*(?:(\d+)\s*)*</\1>
第二个捕获组(\d+)
在\ 2中捕获一个数字,但是外部组重复匹配将覆盖\ 2后续数字,所以最后\ 2将包含最后匹配的数字。
您必须分两步完成此操作。首先提取整组数字,然后分别从中提取数字。
Intermediate step: <(.*?)>\s*(\d+\s*)*</\1>
这将得到类似“157 20 225 99”的内容到\ 2中,然后您可以在空格上分割以获得单个数字。