Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式错误:这个正则表达式有什么问题?_Java_Regex - Fatal编程技术网

Java 正则表达式错误:这个正则表达式有什么问题?

Java 正则表达式错误:这个正则表达式有什么问题?,java,regex,Java,Regex,我正在尝试为Java程序编写一个正则表达式,它匹配所有JS代码片段,如下所示: window.box | | box=函数{box.q.pusharguments;}.q=[]; 框'ns:foo','event','bar',{分隔符:'null',显示名称:'baz',id:'12345',名称:'attr_1',值:'attr_val',事件类型:'abc'}; 这就是我到目前为止所做的: 私有最终静态字符串脚本\u CODE\u REG\u EXP=^\\n.\\\n框\\'ns:.

我正在尝试为Java程序编写一个正则表达式,它匹配所有JS代码片段,如下所示:

window.box | | box=函数{box.q.pusharguments;}.q=[]; 框'ns:foo','event','bar',{分隔符:'null',显示名称:'baz',id:'12345',名称:'attr_1',值:'attr_val',事件类型:'abc'};

这就是我到目前为止所做的:

私有最终静态字符串脚本\u CODE\u REG\u EXP=^\\n.\\\n框\\'ns:.''.','event','%s',\\{%s\\\}{1}\\\\新西兰元

JSON值{分隔符:'null',显示名称:'baz',id:'12345',名称:'attr_1',值:'attr_val',事件类型:'abc'}将作为String.format的一部分传入


我无法将JS代码段与该正则表达式匹配。

如果您查看此正则表达式,java将其解释为:

(^<script>\n.*\n  box(\('ns:.*','event', '%s',)(\{%s\}){1}\)(;\n</script>$)
^... The opening parenthesis is without a corresponding closing parenthesis.
这就是为什么这个正则表达式会给你一个错误。

试试这个正则表达式:

^<script>\n.*\n  box\('ns:.*','event', '%s', \{%s\}\);\n</script>$
爪哇:

变化 删除了不需要的括号或括号位置不正确 在“%s”之后添加了缺少的空格, 删除了不需要的量词{1} 您的问题并不完全清楚,但请确保将两个对象传递给format,因为有两个格式说明符

在将值插入模式之前,请确保将其删除


您可以使用诸如测试正则表达式模式之类的工具,但是它不支持Java正则表达式表示法,因此某些功能可能不可用或仅以不同的形式提供。

您是否使用确保JSON值不包含正则表达式模式?我阅读了关于Pattern.quote的内容。你的意思是用它来定义一个调用split方法的模式,然后计算我的JSON ish模式中的元素数吗?我不太清楚你的意思是什么。您应该使用Patternquote,因为JSON字符串可能包含在有效的正则表达式中,例如{display_name:},插入时,它将与文本*不匹配,但将是前面的量词。我在regex101中尝试了以下操作:^\n.*\n Krux'ns:.*','admEvent',Mb OWQYG',\{.}\n$,它与脚本匹配。但是,当我试图在Java代码中使用这个正则表达式时,正则表达式的最终字符串regex=^\\n.*\\n Krux'ns:.*'、'admEvent'、'Mb OWQYG'、\\{.\\\}\\新西兰元;总是打印额外的。我不知道逃跑有什么不对。请帮忙!你所说的正则表达式[…]正在打印是什么意思?括号前面的反斜杠也必须转义。
String patternString = "^<script>\\n.*\\n  box\\('ns:.*','event', '%s', \\{%s\\}\\);\\n</script>$";