我在构建正则表达式模式以适应我的日志文件中的所有修改时遇到了问题。这是一个充满提取的Android APK包的日志文件。它看起来像这样:
"\\fileserver\folder1\20151215\15\com.some.package1_658d67d60f573a2874c0163bdd3686eb9b15753c:\assets\fonts\somefile-LightIt.otf" is OK
"\\fileserver\folder1\APK_white\20151215\15\com.some.package2_658d67d60f573a2874c0163bdd3686eb9b15753c" is OK
"\\fileserver\folder1\20151215\15\com.some.package3.android_4538d62efe8b312a5adc4ed6aee14d2c37b7da48:\assets\SD\emotions\873.zip:\873\873.png" is OK
"\\fileserver\folder1\20151215\15\com.some.package4.android_4538d6abfe8b312a5adc4ed6aee14d2c37b7da48:\assets\SD\emotions\873.zip:\873\873.sam" is OK
"\\fileserver\folder1\20151215\15\658d67d60f573a2874c0163bdd3686eb9b15753c:\assets\fonts\somefile-LightIt.otf" is OK
我需要的只是获取APK包的名称。这意味着我需要从上述示例中获得以下内容:
com.some.package1_658d67d60f573a2874c0163bdd3686eb9b15753c
com.some.package2_658d67d60f573a2874c0163bdd3686eb9b15753c
com.some.package3.android_4538d62efe8b312a5adc4ed6aee14d2c37b7da48
com.some.package4.android_4538d6abfe8b312a5adc4ed6aee14d2c37b7da48
658d67d60f573a2874c0163bdd3686eb9b15753c
我创造了这个“野蛮”的正则表达式:
((?!.+:\\.*)(?:".+\\(.+)"\s.*))|((?=.+:\\.*)(?:".+\\(.{2,}):\\.*"))
它可以正常工作,直到找到包含其他存档的APK包(我的示例中的最后两行)。这意味着在同一行上有更多“:\”。
我迷路了。感谢您的任何建议
答案 0 :(得分:2)
如果它需要是一个正则表达式,你可以提出:
(com[^:\\\n\r"]+)
# look for com literally
# match everything that is not a colon, backslash, double quote or linebreak
# capture everything into a group
见a demo on regex101.com。否则,请遵循@ Maurice的建议。
答案 1 :(得分:0)
逐行解析日志并使用下面的表达式获取APK文件名。它将获取从最后\
个字符到第一个:
字符的所有内容。
[^\\]*?(?=:+)