java - 如何在Java中使用RegEx?

标签 java regex

我想将以下代码从 Python 传输到 Java,但在执行此操作时出现错误:

import re

payload = re.search(
    r'decrypt\.setPrivateKey\("(?P<privateKey>[^"]+)".*?'
    r'decrypt\.decrypt\("(?P<cryptText>[^"]+)".*?'
    r'document\.cookie="ipp_uid=(?P<ipp_uid>[^"]+)".*?'
    r'document\.cookie="ipp_uid1=(?P<ipp_uid1>[^"]+)".*?'
    r'document\.cookie="ipp_uid2=(?P<ipp_uid2>[^"]+)".*?'
    r'url\s\+=\s"(?P<makeURL>.*?)"\;.*?'
    r'salt="(?P<salt>[^"]+)"',
    ret.content.decode('utf-8'),
    re.MULTILINE | re.DOTALL
)

我已经尝试过以下代码:

String patternString = "decrypt\\.setPrivateKey\\(\"(?P<privateKey>[^\"]+)\".*?\n"
                    + "    decrypt\\.decrypt\\(\"(?P<cryptText>[^\"]+)\".*?\n"
                    + "    document\\.cookie=\"ipp_uid=(?P<ipp_uid>[^\"]+)\".*?\n"
                    + "    document\\.cookie=\"ipp_uid1=(?P<ipp_uid1>[^\"]+)\".*?\n"
                    + "    document\\.cookie=\"ipp_uid2=(?P<ipp_uid2>[^\"]+)\".*?\n"
                    + "    url\\s\\+=\\s\"(?P<makeURL>.*?)\"\\;.*?\n"
                    + "    salt=\"(?P<salt>[^\"]+)\"";
            Pattern payload = Pattern.compile(patternString);
            String content = new String(html.getBytes(), "UTF-8");
            Matcher m = payload.matcher(html);
            if(m.find()){
                System.out.println("Found: " + m.group(0));
            }else{
                System.out.println("not found");
            }

...但我收到此错误:

java.util.regex.PatternSyntaxException: Unknown inline modifier near index 27
decrypt\.setPrivateKey\("(?P<privateKey>[^"]+)".*?
    decrypt\.decrypt\("(?P<cryptText>[^"]+)".*?
    document\.cookie="ipp_uid=(?P<ipp_uid>[^"]+)".*?
    document\.cookie="ipp_uid1=(?P<ipp_uid1>[^"]+)".*?
    document\.cookie="ipp_uid2=(?P<ipp_uid2>[^"]+)".*?
    url\s\+=\s"(?P<makeURL>.*?)"\;.*?
    salt="(?P<salt>[^"]+)"
                             ^
    at java.util.regex.Pattern.error(Pattern.java:1957)
    at java.util.regex.Pattern.group0(Pattern.java:2896)
    at java.util.regex.Pattern.sequence(Pattern.java:2053)
    at java.util.regex.Pattern.expr(Pattern.java:1998)
    at java.util.regex.Pattern.compile(Pattern.java:1698)
    at java.util.regex.Pattern.<init>(Pattern.java:1351)
    at java.util.regex.Pattern.compile(Pattern.java:1028)
    at fabian.site.MyModule.test(MyModule.java:76)
    at fabian.site.MyModule.run(MyModule.java:61)
    at fabian.thread.ThreadPool$PoolThread.run(ThreadPool.java:50)

谢谢各位的帮助!!

最佳答案

有两件事对我来说很突出:

  • Java 中的命名捕获组的结构类似于 (?<name>X) ,不是(?P<name>X) ,所以你应该删除 Ps
  • 名称不能包含“_”,因此您应该替换 ipp_uid类似于 ippUid (仅限字母和数字)
String patternString = "decrypt\\.setPrivateKey\\(\"(?<privateKey>[^\"]+)\".*?\n"
                + "    decrypt\\.decrypt\\(\"(?<cryptText>[^\"]+)\".*?\n"
                + "    document\\.cookie=\"ipp_uid=(?<ippuid>[^\"]+)\".*?\n"
                + "    document\\.cookie=\"ipp_uid1=(?<ippuid1>[^\"]+)\".*?\n"
                + "    document\\.cookie=\"ipp_uid2=(?<ippuid2>[^\"]+)\".*?\n"
                + "    url\\s\\+=\\s\"(?<makeURL>.*?)\"\\;.*?\n"
                + "    salt=\"(?<salt>[^\"]+)\"";

我没有任何示例数据,所以很难判断它是否能以这种方式工作,但它确实编译没有错误。

关于java - 如何在Java中使用RegEx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57464026/

相关文章:

java - OpenCV-Android : Import . png 保留空白区域的透明度

java - 尝试从 maven 运行 java 程序时出现异常

regex - 删除 : multiline + positive lookahead

javascript - 替换除 Regex 组之外的所有内容?

java - 从 ANTLR 文法创建树

java - 如果数据打开,则不会创建套接字

java - 为什么多次调用 contextInitialized()?

regex - Perl正则表达式删除字符串中重复的连续子字符串

java - 正则表达式获取部分异常消息

regex - 删除 R 中欧元符号后的字符