繁体   English   中英

用于处理键值对的正则表达式

[英]Regular expression to process key value pairs

我试图编写一个正则表达式来处理一串格式如此的键值对

KEY/VALUE KEY/VALUE VALUE KEY/VALUE

键可以具有由空格分隔的多个值。

我想将键值匹配在一起,因此上面字符串的结果将是

VALUE
VALUE VALUE
VALUE

我目前有以下作为我的正则表达式

[A-Z0-9]+/([A-Z0-9 ]+)(?:(?!^[A-Z0-9]+/))

但这会回来

VALUE KEY 

作为第一个结果。

在您的否定前瞻断言中,将+更改为* ; 否则,您不会阻止匹配在/之前结束,而只是阻止它在紧跟/的单词之前结束。 另外,从负前瞻断言中删除^ ; 它的意思是“字符串的开头”,所以在这种情况下永远不会匹配。 离开:

[A-Z0-9]+/([A-Z0-9 ]+)(?![A-Z0-9]*/)

(我也放弃了(?:...)表示法,因为它在出现的上下文中没有效果。)

也就是说,一种稍微容易阅读的方法可能是这样的:

[A-Z0-9]+/([A-Z0-9 ]+)( |$)

要求该值后面跟一个空格(被吞咽)或字符串结尾。 由于键后跟/ ,它将忽略它们。

为何选择RegEx?

String input = "key/value key/value1 value2 key/value";

String[] pairs = input.split("/");

for(int i = 0; i < pairs.length; i += 2) {
    String key = pairs[0];
    String value = pairs[1];
    /* (Optionally)
        String[] values = value.split(" ");
    */
}

但是,如果您坚持,那么我认为:

([\\w]+)/([\\w ]+)(?![\\w]*/)

这是一个不错的选择,它使您可以将键组和值作为单独的组来查找和捕获。 它允许在键和值名称中使用下划线。 如果您愿意,也可以在集合中添加连字符。

图片来源:Ruakh负责RegEx的大部分工作。 我赞成他/她的回答。

你最好使用某种字符串拆分(不是java程序员,但在php中有explode()函数)。 首先根据空格将字符串拆分为键/值项数组,然后循环遍历数组项,然后再次使用/拆分它们

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM