栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

匹配键值模式正则表达式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

匹配键值模式正则表达式

假定

除行终止符之外的任何字符都指定紧随其后的字符。

您可以使用以下正则表达式来匹配键值对的所有实例:

"([a-zA-Z0-9]+):"((?:[^\\"]|\\.)*+)""

如果要允许自由间距

\s*
,请在之前和之后添加
:

这是正则表达式引擎看到的内容:

([a-zA-Z0-9]+):"((?:[^\"]|\.)*+)"

量词

*
由所有格
*+
,由于2个分支
[^\"]
\.
是互斥(没有字符串可由两个在同一时间相匹配)。它还避免
StackOverflowError
了在Oracle的实现
Pattern
类。

在Matcher循环中使用上述正则表达式:

Pattern keyValuePattern = Pattern.compile("([a-zA-Z0-9]+):"((?:[^\\"]|\\.)*+)"");Matcher matcher = keyValuePattern.matcher(inputString);while (matcher.find()) {    String key = matcher.group(1);    // Process the escape sequences in the value string    String value = matcher.group(2).replaceAll("\\(.)", "$1");    // ...}

在一般的情况下,根据不同的转义序列的复杂性(例如

n
uhhhh
xhh
),你可能会想要写一个单独的函数来分析它们。但是,基于上述假设,单线就足够了。

请注意,尽管如此,该解决方案并不关心分隔符。并且它将在无效输入上跳至最接近的匹配项。在下面的无效输入示例中,以上解决方案将

abc:"
在开头跳过并愉快地将
xyz:"texttext"
amd
more:"pair"
作为键值对进行匹配:

abc:"xyz:"text text", more:"pair"

如果这种行为不是所希望的,那么有一个解决方案,但是必须首先隔离包含所有键值对的字符串,而不是使其成为与键值对没有任何关系的更大字符串的一部分:

"(?:^|(?!^)\G,)([a-zA-Z0-9]+):"((?:[^\\"]|\\.)*+)""

免费版本:

"(?:^s*|(?!^)\Gs*,s*)([a-zA-Z0-9]+)s*:s*"((?:[^\\"]|\\.)*+)""


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/574661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号