[英]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.