使用Java正则表达式拆分字符串?

时间:2014-01-04 07:01:36

标签: java regex

<189>131: *Jan  2 13:20:47.581: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up

从上面的String中,我想拆分以下内容:

 189  -between <>
    Jan  2 13:20:47.581  -between * %
    LINEPROTO 
    5
    UPDOWN
    FastEthernet0/1 - after string Interface
    up  -after String state to status 

Final String数组将是:

[189],[Jan  2 13:20:47.581],[LINEPROTO],[5],[UPDOWN],[FastEthernet0/1],[up]

如何使用java regex执行此操作?

2 个答案:

答案 0 :(得分:0)

此正则表达式将捕获您需要的组:

<(.+)>.+?[*](.+?)%(LINEPROTO)-(.+?)-(.+?):.+?Interface (.+?), changed state to (.+)

这些组(以逗号分隔):

189,Jan 2 13:20:47.581 :, LINEPROTO,5,UPDOWN,FastEthernet0 / 1,up

请注意,Jan 2 13:20:47.581:包括&#39;:&#39;因为你表示你想要*和%之间的所有内容。

正则表达式的解释:

  • ()是小组。
  • +?是非贪心的
  • [*]是&#39; *&#39;字符而不是正则表达式运算符。

另外,我认为你并不想要字面意义上的&#39; LINEPROTO&#39; (即使你的指示似乎表明你这样做)。在这种情况下,您需要:

<(.+)>.+?[*](.+?)%(.+)-(.+?)-(.+?):.+?Interface (.+?), changed state to (.+)

根据评论进行更新

更新的正则表达式是:

<(.+)>.+?[*](.+?): %(.+)-(.+?)-(.+?):.+?Interface (.+?), changed state to (.+)

团体将是: 189,Jan 2 13:20:47.581,LINEPROTO,5,UPDOWN,FastEthernet0 / 1,up

答案 1 :(得分:-1)

您需要查看JavaScript的substrsplit ..应该可以帮到您。