【发布时间】:2022-01-22 10:33:41
【问题描述】:
这是输入:[style~=url(\s*?['|"]?(http://[\w_-]+(?:(?:.[\w_-]+)+) )[\w.,@?^=%&:/~$+#-]*[\w@?^=%&/~+#-])['|"]?)] 到 jsoup 选择器类。
这是完整的堆栈跟踪:
java.util.UnknownFormatConversionException: Conversion = '&'
at java.util.Formatter.checkText(Formatter.java:2579)
at java.util.Formatter.parse(Formatter.java:2565)
at java.util.Formatter.format(Formatter.java:2501)
at java.util.Formatter.format(Formatter.java:2455)
at java.lang.String.format(String.java:2940)
at org.jsoup.select.Selector$SelectorParseException.<init>(Selector.java:167)
at org.jsoup.select.QueryParser.parse(QueryParser.java:47)
at org.jsoup.select.Selector.select(Selector.java:95)
at org.jsoup.nodes.Element.select(Element.java:421)
【问题讨论】:
-
详细错误信息:详细错误信息:在 'style~=url(\s*?['|"]?(http://[\w_-]+( ?:(?:\.[\w_-]+)+)[\w.,@?^=%&:\/~$+#-]*[\w@?^=%&\/~+ #-])['|"]?)'
-
抱歉,刚刚检查过,Java 中的非转义方括号在平衡文本时无效。在每个其他引擎中,在类中打开未转义的括号都可以。不幸的是,现在看来原因很明显了。
-
这是我的正则表达式:(http://[\w_-]+(?:(?:.[\w_-]+)+)[\w.,@?^= %&:/~$+#-]*[\w@?^=%&/~+#-])['|"]?) 和 jsoup 详细的错误信息是 Did not find balance marker 。要改什么我的正则表达式使其平衡?
-
(http://[\w_-]+(?:(?:.[\w_-]+)+)[\w.,@?^=%&:/~$+#-]*[\w@?^=%&/~+#-])['|"]?) <-- Unbalanced ')'删除最后一个) -
对我来说,这整件事
style~=url(散发着 Perl 运算符~=的味道。给它一些分隔符,即。style~=/url(\s*?['|"]?(http://[\w_-]+(?:(?:\.[\w_-]+)+)[\w.,@?^=%&:\/~$+#-]*[\w@?^=%&\/~+#-])['|"]?)/除非url()是一个函数。如果是这样,则返回以()作为分隔符的方格 1。必须转义内部()的地方。
标签: java regex jsoup regexp-replace