背景
我正在尝试使用regex注册表路径并将其分解为hive,key,subkey,value和data。到目前为止,我已经获得了正常工作密钥的正则表达式,但我在成功获得子密钥时遇到了问题。
问题:
我的正则表达式是什么让它显示“m”?我应该做什么而只是在第一次斜线后收集所有东西?
正在测试的正则表达式:
(?<subkeyName>[^\\](\\.*)+$)
示例数据:
HKLM\System\CurrentControlSet\Control\Lsa\LsaPid
我看到的是结果:
M\System\CurrentControlSet\Control\Lsa\LsaPid
所需的输出:
System\CurrentControlSet\Control\Lsa\LsaPid
我正在使用的正则表达式测试程序:
https://www.freeformatter.com/java-regex-tester.html#ad-output
解决方案以及原因:
\\\\(?<subkeyName>.*)
问题最终是我的应用程序在后端使用的解释器需要转义特定的特殊字符。如果在正常情况下使用@revo提供的解决方案是正确的,我已经标记了它。
答案 0 :(得分:1)
我的正则表达式是什么让它显示&#34; m \&#34;?
[^\\]
部分。
我应该做什么而只是收集后的所有内容 先斜线?
删除它:
\\(?<subkeyName>.*)
答案 1 :(得分:0)
[^\\]
会捕获非\
的每个字符,在您的情况下为M
。
使用this regex,此代码可以帮助您捕获第一个斜杠之后的所有内容:
String regex = "(?<subkeyName>(?:[^\\\\]\\\\)(.*)$)";
String input = "HKLM\\System\\CurrentControlSet\\Control\\Lsa\\LsaPid";
Matcher m = Pattern.compile(regex).matcher(input);
m.find();
String result = m.group(2);