如何在Java中使用正则表达式?

如何在Java中使用正则表达式?,java,regex,Java,Regex,我想将以下代码从Python传输到Java,但在执行此操作时出现错误: 重新导入 有效载荷=重新搜索( r'decrypt\.setPrivateKey\(“(?P[^”]+)”*?' r'decrypt\.decrypt\(“(?P[^”]+)”*?' r'document\.cookie=“ipp_uid=(?P[^”]+)”*?' r'document\.cookie=“ipp_uid1=(?P[^”]+)”*?' r'document\.cookie=“ipp_uid2=(?P[^”]+

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

重新导入
有效载荷=重新搜索(
r'decrypt\.setPrivateKey\(“(?P[^”]+)”*?'
r'decrypt\.decrypt\(“(?P[^”]+)”*?'
r'document\.cookie=“ipp_uid=(?P[^”]+)”*?'
r'document\.cookie=“ipp_uid1=(?P[^”]+)”*?'
r'document\.cookie=“ipp_uid2=(?P[^”]+)”*?'
r'url\s\+=\s“(?P.*?)\;*?”
r'salt=“(?P[^”]+)”,
检索内容解码('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");
            }
String patternString=“decrypt\\.setPrivateKey\\(\”(?P[^\“]+)\”*?\n
+“decrypt\\.decrypt\\(\”(?P[^\“]+)\”*?\n”
+“文档\\.cookie=\”ipp\U uid=(?P[^\“]+)\”*?\n”
+“文档\\.cookie=\”ipp\U uid1=(?P[^\“]+)\”*?\n”
+“文档\\.cookie=\”ipp\U uid2=(?P[^\“]+)\”*?\n”
+“url\\s\\+=\\s\”(?P.*?\“\\;*?\n”
+“salt=\”(?P[^\“]+)\”;
模式负载=Pattern.compile(patternString);
字符串内容=新字符串(html.getBytes(),“UTF-8”);
Matcher m=payload.Matcher(html);
if(m.find()){
System.out.println(“发现:+m.group(0));
}否则{
System.out.println(“未找到”);
}
…但我得到了这个错误:

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.util.regex.PatternSyntaxException:索引27附近的未知内联修饰符
解密\.setPrivateKey\(“(?P[^”]+)”*?
解密\。解密\(“(?P[^”]+)”*?
document\.cookie=“ipp_uid=(?P[^”]+)”*?
document\.cookie=“ipp_uid1=(?P[^”]+)”*?
document\.cookie=“ipp_uid2=(?P[^”]+)”*?
url\s\+=\s“(?P.*?)\;*?
salt=“(?P[^”]+)”
^
位于java.util.regex.Pattern.error(Pattern.java:1957)
位于java.util.regex.Pattern.group0(Pattern.java:2896)
位于java.util.regex.Pattern.sequence(Pattern.java:2053)
位于java.util.regex.Pattern.expr(Pattern.java:1998)
位于java.util.regex.Pattern.compile(Pattern.java:1698)
Pattern.(Pattern.java:1351)
位于java.util.regex.Pattern.compile(Pattern.java:1028)
在fabian.site.MyModule.test(MyModule.java:76)上
运行(MyModule.java:61)
在fabian.thread.ThreadPool$PoolThread.run(ThreadPool.java:50)

谢谢你们的帮助!!

我有两件事很突出:

  • Java中的命名捕获组的结构类似于
    (?X)
    ,而不是
    (?PX)
    ,因此您应该删除Ps
  • 名称不能包含“u”,因此应将
    ipp\u uid
    替换为类似
    ippUid
    (仅字母和数字)
String patternString=“decrypt\\.setPrivateKey\\(\”(?[^\“]+)\”*?\n
+“decrypt\\.decrypt\\(\”(?[^\“]+)\”*?\n”
+“文档\\.cookie=\”ipp\U uid=(?[^\“]+)\”*?\n”
+“文档\\.cookie=\”ipp\U uid1=(?[^\“]+)\”*?\n”
+“文档\\.cookie=\”ipp\U uid2=(?[^\“]+)\”*?\n”
+“url\\s\\+=\\s\”(?.*?\”\\;。?\n”
+“盐=\”(?[^\“]+)\”;

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

我猜它是在抱怨
字符,而且因为没有“原始字符串”(即
r'…”
)在Java中,您应该将它们全部删除。是的,
r
看起来是PHP中的标识符,而不是正则表达式的一部分。此外,如果
html
已经是String类型,则
String content=new String(html.getBytes(),“UTF-8”);
完全不需要。只需直接搜索
html
。请不要在评论中发布长代码段。结果完全不可读且未格式化。请编辑您的问题,并将代码正确格式发布到问题中。对不起,我编辑了问题。谢谢,现在它说找不到,但为什么?这是一张图片关于姓名:
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>[^\"]+)\"";