背景:
我正在尝试正则表达式注册表路径并将其分解为配置单元、键、子项、值和数据。到目前为止,我已经得到了一个用于工作的正则表达式,但我在成功获得子键时遇到了问题。
问题:
我的正则表达式中的什么让它显示"M\"? 我应该怎么做才能只收集第一个斜杠后的所有内容?
正在测试的正则表达式:
(?<subkeyName>[^\](\.*)+$)
示例数据:
HKLMSystemCurrentControlSetControlLsaLsaPid
我所看到的结果:
MSystemCurrentControlSetControlLsaLsaPid
期望的输出:
SystemCurrentControlSetControlLsaLsaPid
我正在使用的正则表达式测试器: https://www.freeformatter.com/java-regex-tester.html#ad-output
解决方案及其原因:
\\(?<subkeyName>.*)
问题最终是我的应用程序在后端使用的解释器需要转义特定的特殊字符。 如果在正常情况下使用,@revo提供的解决方案是正确的,我已经将其标记为这样。
我的正则表达式中是什么让它显示"m\"?
[^\]
部分。
我应该怎么做,只收集所有东西之后 第一刀?
删除它:
\(?<subkeyName>.*)
[^\]
捕获每个未字符,在您的情况下它是
M
。
使用此正则表达式,此代码应该可以帮助您捕获第一个斜杠后的所有内容:
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);