gpt4 book ai didi

java - 速度 - 更正正则表达式以删除控制字符?

转载 作者:行者123 更新时间:2023-11-30 05:55:29 27 4
gpt4 key购买 nike

我正在尝试从 Velocity 中的字符串中删除不需要的字符(换行符可以,但不能像 EM 和 CAN ASCII 控制字符那样)。

#set($cleanScreen = $cleanScreen.replaceAll("\p{Cc}", ""))

抛出:

org.apache.velocity.exception.ParseErrorException: Lexical error: org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 13, column 82.  Encountered: "p" (112), after : "\"\\"
at org.apache.velocity.Template.process(Template.java:137)
at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:415)
at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:335)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1102)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1077)
at org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:303)
at org.apache.velocity.app.Velocity.getTemplate(Velocity.java:503)

#set($cleanScreen = $cleanScreen.replaceAll("[[:cntrl:]]", ""))

这个没有抛出异常,相反,它匹配字符 c,n,t,r,l 并将它们从字符串中删除。

和...

#set($cleanScreen = $cleanScreen.replaceAll("\\p{Cntrl}", ""))

抛出:

java.util.regex.PatternSyntaxException: Illegal repetition near index 2
\\p{Cntrl}
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.closure(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at sun.reflect.GeneratedMethodAccessor168.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:295)
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:245)

我试过几个正则表达式(很多似乎在 Java 中有效,但在 VTL 中无效)?我的关键问题似乎是 Java 和 Velocity 之间的转义有何不同?

有人可以帮忙吗?我只能访问 VTL,不能访问 Java 类。

最佳答案

我无法评论实际的正则表达式。

然而,在速度方面,我发现......

#set($cleanScreen = $cleanScreen.replaceAll("\p{Cc}", ""))
#set($cleanScreen = $cleanScreen.replaceAll("[[:cntrl:]]", ""))

...这两个是正确的。我有一个小的 vtl 外壳,我只是将您的 vtl 代码复制粘贴到其中。您真的会在前两个表达式中遇到这些错误吗?使用 '\p{Cc}' 怎么样?

#set($cleanScreen = $cleanScreen.replaceAll("\\p{Cntrl}", ""))

'\\p' 会给您带来麻烦。

附带说明,您可以使用 http://velocity.apache.org/tools/devel/generic/EscapeTool.html满足您所有的逃生需求。

关于java - 速度 - 更正正则表达式以删除控制字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8255689/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com